c#读取XML节点并将其存储到字符串类型引用

时间:2017-04-12 07:15:18

标签: c# xml

我有以下XML: 我只需要读取“ShortName”节点,但需要读取不同的字符串类型引用。 我如何引用source并获取shortname的文本然后对目标执行相同的操作? xml包含更多元素,例如Valid,我可以逐一阅读,代码如下:

valid = TMElement.GetElementsByTagName("Valid")[0].InnerText;

<GlobalInfo>
 <LanguagePair>
  <Source>
    <ShortName>some data</ShortName>
  </Source>
  <Target>
    <ShortName>some data</ShortName>
  </Target>
</LanguagePair>
<Valid>true</Valid>

3 个答案:

答案 0 :(得分:2)

你可以试试这个:

string xml = @"<GlobalInfo>
                 <LanguagePair>
                   <Source>
                     <ShortName>some data source</ShortName>
                    </Source>
                    <Target>
                      <ShortName>some data target</ShortName>
                     </Target>
                 </LanguagePair>
                 <Valid>true</Valid>
               </GlobalInfo>";

XDocument xmlDoc = XDocument.Parse(xml);

LINQ查询语法:

string[] someDataSource = 
    (from data in xmlDoc.Descendants("Source")
     select data.Element("ShortName").Value).ToArray();

string[] someDataTarget = (from data in xmlDoc.Descendants("Target")
     select data.Element("ShortName").Value).ToArray();

或方法语法:

string[] someDataSource2 = xmlDoc.Descendants("Source").Select(x => x.Element("ShortName").Value).ToArray();
string[] someDataTarget2 = xmlDoc.Descendants("Target").Select(x => x.Element("ShortName").Value).ToArray();

答案 1 :(得分:0)

试试这个。导入using System.Xml;

        XmlDocument xdoc = new XmlDocument();
        // if xml coming via string
        string myXml = "<GlobalInfo><LanguagePair><Source><ShortName>some data</ShortName></Source><Target><ShortName>some data</ShortName></Target></LanguagePair></GlobalInfo>";
        xdoc.LoadXml(myXml);

        string xpath = "GlobalInfo/LanguagePair";//specify path
        var nodes = xdoc.SelectNodes(xpath);

        foreach (XmlNode childrenNode in nodes)
        {
            for (int i = 0; i < childrenNode.ChildNodes.Count; i++) {
                HttpContext.Current.Response.Write(childrenNode.ChildNodes[i].InnerText);
            }
        } 

答案 2 :(得分:0)

谢谢大家。 这似乎比我更容易。最后,我找到了自己的解决方案。 只是为了记录,我会在这里发布:

string source = TMElement.SelectSingleNode("LanguagePair/Source/ShortName").InnerText;
string target = TMElement.SelectSingleNode("LanguagePair/Target/ShortName").InnerText;