2013-07-03 77 views
1

我有下面的Xml文件内容,我试图获得<text> & <content .. />标签,它们只在标签<navmap> ... </navmap>内。从XML中的标签获取标签值

我使用的命名空间using Windows.Data.Xml.Dom;

XmlDocument()早期工作的XmlDocument(),但这种类型的XML内容是完全不同的,我没有得到的想法,我有标签值与标签要使用的属性。

 <docTitle> 
     <text>XXXXXXX</text> 
     </docTitle> 
    <navMap> 
    <navPoint id="navpoint-1" playOrder="1"> 
     <navLabel> 
     <text>Title Page</text> 
     </navLabel> 
     <content src="000.html" /> 
    </navPoint> 
    <navPoint id="navpoint-2" playOrder="2"> 
     <navLabel> 
     <text>Main Text</text> 
     </navLabel> 
     <content src="01M.html" /> 
    </navPoint> 
    </navMap> 

我正与使用C# 我想这样的Windows Store应用程序..

  using Windows.Data.Xml.Dom; 
      --------------- 
      --------------- 
      --------------- 

      StorageFile tocFile = await finalfolder.GetFileAsync(tocFileValue); 
      string fileContents1 = await FileIO.ReadTextAsync(tocFile); 
      string encodedContent1 = fileContents1.Replace("&nbsp;", "&#160;"); 
      tocDocument.LoadXml(encodedContent1,loadSettings1); 
      XmlNodeList tocNodeList = tocDocument.GetElementsByTagName("navMap"); 
      foreach (XmlElement Element in tocNodeList) 
      { 
       //Element is showing as null.. 
      } 

熟悉命名空间using Windows.Data.Xml.Dom;XmlDocument()给我建议。

感谢

回答

1

你可以简单地做到这一点...

XmlDocument xml = new XmlDocument(); 
     xml.LoadXml(urXml); 

    XmlNodeList textlist = xml.GetElementsByTagName("text"); 
    XmlNodeList contentList = xml.GetElementsByTagName("content"); 

    for (int i = 0; i < textlist.Count; i++) 
    { 
     string s1 = textlist[i].InnerText; // 
    } 
    for (int j = 0; j < contentList.Count; j++) 
    { 
     string s2 = contentList[j].InnerText; 
    } 

U可以打通this..string文本采取只是为了显示谓u能拿到内部text..if要存储在文本tag..use列表中的所有值,并添加自己的innerText

,如: -

for (int i = 0; i < textlist.Count; i++) 
{ 
if(i==0) 
List<string> str=new list<string>(); 

str.Add(textlist[i].InnerText); 
} 

相同的内容标签的情况下..

希望这有助于.. :)

+0

你在''之前见过''标签吗?''标签? – Kumar

+0

如果你想要所有的文本标签值添加到列表中,你可以通过使用此方法。即使你有 tag.TextList将包含文本节点的有序集合,你可以提取有序的内部文本通过这种方法.. – Vishal

+0

好吧,它是如何使用''。 还有一件事,对于'contentlist'而言,Innertext将不起作用,因为sec值在标签中。我这样做'XmlAttribute Str1 = idref.GetAttributeNode(“src”); Contentlist.Add(Str1.Value);' – Kumar

1

随着XmlDocument的,你可以做到以下几点...

XmlNodeList xnList = xd.SelectNodes("navMap/navPoint"); //xd being your xmldocument. returns all "navPoint" nodes under navMap and navMap is your root node 
     foreach (XmlNode node in xnList) 
     { 
      string retText = node["navLabel"]["text"].InnerText;     // navLabel/text 
      string retContentAtt = node["content"].Attributes["src"].Value; // navPoint/content src=" 
     } 

我觉得这是什么你正在寻找。希望它有帮助

+0

正在获取错误'不能将带[[]的索引应用于'Page.XmlNode'类型的表达式在'node [“navLabel”] [“text”]。' – Kumar

+0

如果if你替换为 'string retText = node.SelectSingleNode(“navLabel”)。SelectSingleNode(“text”)。InnerText; string retContentAtt = node.SelectSingleNode(“content”)。Attributes [“src”]。Value;' – Justin

+0

否它不会工作, 是使用Windows.Data.Xml.Dom的nameSpace的'XmlDocument()'; [http://sdrv.ms/13lwh9Q] – Kumar