[英]XmlNode.InnerText
我们有这样的XML:
<Example>
<Node>Some text here
<ChildNode>Child 1</ChildNode>
<ChildNode>Child 2</ChildNode>
</Node>
</Example>
我们正在使用XmlDocument
对此进行解析。
当我们拥有“ Node”元素的XmlNode时, XmlNode.InnerText
我们返回以下内容:
"Some text hereChild 1Child2"
我们如何获得Node元素的内部文本而没有子节点的内部文本? 我们真的不希望使用任何RegEx或字符串拆分来完成此操作。
注意:我们也不想切换到使用其他类集来解析此XML,这将是太多的代码更改。
var doc = new XmlDocument();
doc.LoadXml(xml);
var text = doc.SelectSingleNode("Example/Node/text()").InnerText; // or .Value
退货
"Some text here\r\n "
和text.Trim()
返回
"Some text here"
怎么样:
XmlDocument d=new XmlDocument();
d.LoadXml(@"<Example>
<Node>Some text here
<ChildNode>Child 1</ChildNode>
<ChildNode>Child 2</ChildNode>
</Node>
</Example>");
var textNodeValues=d.DocumentElement
.FirstChild
.ChildNodes
.Cast<XmlNode>()
.Where(x=>x.NodeType==XmlNodeType.Text)
.Select(x=>x.Value);
您可以像这样实现:
XmlDocument doc = new XmlDocument();
doc.LoadXml("<Example><Node>Some text here<ChildNode>Child 1</ChildNode><ChildNode>Child 2</ChildNode></Node></Example>");
XmlNode node = doc.SelectSingleNode( "Example/Node" );
if (node.HasChildNodes)
{
string value = node.FirstChild.Value;
}
据我所知,没有直接的方法可以做到这一点。 您必须遍历子文本节点并自己构建串联的文本:
using System.Text;
using System.Xml;
public string GetImmediateInnerText(XmlNode node)
{
StringBuilder builder = new StringBuilder();
foreach (XmlNode child in node.ChildNodes) {
if (child.NodeType == XmlNodeType.Text) {
builder.Append(child.Value);
}
}
return builder.ToString();
}
您也可以使用text()
XPath表达式,就像@abatishchev一样:
public string GetImmediateInnerText(XmlNode node)
{
StringBuilder builder = new StringBuilder();
foreach (XmlNode child in node.SelectNodes("text()")) {
builder.Append(child.Value);
}
return builder.ToString();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.