【问题标题】:Getting tag values with in the Tags from XML从 XML 的标签中获取标签值
【发布时间】:2013-07-03 12:18:40
【问题描述】:

我有以下 Xml 文件内容,我试图获取标签 <text><content .. /> 的值,它们仅在标签 <navmap> ... </navmap> 内。

我正在使用命名空间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 商店应用程序 我试过这样..

            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..
            }   

谁熟悉XmlDocument()的nameSpaceusing Windows.Data.Xml.Dom;给我建议。

谢谢

【问题讨论】:

    标签: c# windows-store-apps 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;
        }
    

    你可以通过这个..字符串获取文本只是为了表明你可以获取内部文本..如果你想将所有值存储在文本标签下..使用列表并添加它们的内部文本

    喜欢:-

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

    与内容标签相同..

    希望这会有所帮助..:)

    【讨论】:

    • 你在&lt;doctitle&gt;标签之前看到&lt;text&gt;标签&lt;navmap&gt;..?
    • 如果您希望将所有文本标签值添加到列表中,您可以使用此方法获得它..即使您在 标签中有它。TextList 将包含文本节点的有序集合你可以通过这种方法有序地提取内部文本..
    • 好的,它是如何使用&lt;navMap&gt; 的。还有一件事,对于contentlist,Innertext 不起作用,因为 sec 值在标签中。我正在这样做XmlAttribute Str1 = idref.GetAttributeNode("src"); Contentlist.Add(Str1.Value);
    【解决方案2】:

    使用 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=" 
            }
    

    我认为这就是您要寻找的。希望对你有帮助

    【讨论】:

    • 出现错误Cannot apply indexing with [] to an expression of type 'Page.XmlNode' 开启node["navLabel"]["text"].
    • 如果换成string retText = node.SelectSingleNode("navLabel").SelectSingleNode("text").InnerText; string retContentAtt = node.SelectSingleNode("content").Attributes["src"].Value;会怎样
    • 不行不行,是不是XmlDocument()的nameSpace使用Windows.Data.Xml.Dom; [sdrv.ms/13lwh9Q]
    • 无法测试。从谷歌结果中读取。试试...string retText = node.FirstChild.FirstChild.InnerText; XmlAttributeCollection attributes = node.LastChild.Attributes; string retContentAtt = attributes[0].Value;
    • 不,对不起。它看起来与我之前发布的图像相同。我正在通过另一个答案进行一些更改。感谢您提供宝贵的解决方案
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-24
    • 1970-01-01
    • 2012-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多