[英]How to get the specific innertext of my xmlnode in C#?
我有一個用於處理的Xml節點。下一個是我的xml節點。
<w:p>
<w:r>
<w:t>
Text1
</w:t>
</w:r>
<w:r>
<w:pict>
<w:p>
<w:r>
<w:t>
text2
</w:t>
</w:r>
</w:p>
</w:pict>
</w:r>
<w:r>
<w:t>
Text3
</w:t>
</w:r>
<w:r>
</w:p>
現在我只想從<w:p><w:r><w:t>
獲取內部文本,而不是從<w:p><w:r><w:pict><w:p><w:r><w:t>
。
所以,我需要的輸出是Text1Text3
我的C#代碼是:
XmlNodeList pNode = xDoc.GetElementsByTagName("w:p");
for (int i = 0; i < pNode.Count; i++)
{
if(i==0) //This is my criteria
{
XmlNode firstNode = pNode[i];
string innerText=firstNode.innerText.toString().Trim();
}
}
但是它返回所有內部文本,例如Text1Text2Text3
請指導我擺脫這個問題?
您可以使用XPath :(我認為以下方法適用於您)
w:p/w:r/w:t
您需要檢查每個元素p
的錨點都不是pict
元素。
var result = XElement.Load(@"path-to-your-xml")
.Descendants("t")
.Where(e => !e.AnchestorsAndSelf().Any(a => a.Name.LocalName == "pict"));
我建議您使用XDocument
(如果您具有.NET 3.5或更高版本)。 該代碼獲取所有具有模式p/r/t
但沒有pict/p/r/t
元素的值:
// Use this if you're loading XML from a string
XDocument doc = XDocument.Parse(inputString);
// Use this if you're loading XML from a file
//XDocument doc = XDocument.Load(<filepath>);
var pElements = doc.Root
.Descendants()
.Where(el => el.Name.LocalName == "p" && el.Parent.Name.LocalName != "pict");
List<string> innerTexts = new List<string>();
foreach(XElement p in pElements)
{
var rElements = p.Elements().Where(el => el.Name.LocalName == "r");
foreach(XElement r in rElements)
{
var tElements = r.Elements().Where(el => el.Name.LocalName == "t");
innerTexts.AddRange(tElements.Select(el => el.Value).ToArray());
}
}
由於未提供有關w
名稱空間的信息,因此我使用了LocalName
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.