【问题标题】:XML string to XML documentXML 字符串到 XML 文档
【发布时间】:2011-06-19 13:25:32
【问题描述】:

我在 String 中有一个完整的 XML 文档,我需要将其转换为 XML 文档并解析文档中的标签

【问题讨论】:

  • @svick 那么为什么要创建堆栈溢出流呢?
  • @svick 在这里问这么简单的问题是完全可以的。看看我在 if 语句中关于 AND 和 OR 的问题。没有人抱怨在 Stackoverflow 上提问太简单了。

标签: c# xml


【解决方案1】:

此代码示例取自csharp-examples.net,由Jan Slama编写:

要在 XML 文件中查找节点,您可以使用 XPath 表达式。方法 XmlNode.SelectNodes 返回由 XPath 字符串选择的节点列表。方法 XmlNode.SelectSingleNode 查找与 XPath 字符串匹配的第一个节点。

XML:

<Names>
    <Name>
        <FirstName>John</FirstName>
        <LastName>Smith</LastName>
    </Name>
    <Name>
        <FirstName>James</FirstName>
        <LastName>White</LastName>
    </Name>
</Names>

代码:

XmlDocument xml = new XmlDocument();
xml.LoadXml(myXmlString); // suppose that myXmlString contains "<Names>...</Names>"

XmlNodeList xnList = xml.SelectNodes("/Names/Name");
foreach (XmlNode xn in xnList)
{
  string firstName = xn["FirstName"].InnerText;
  string lastName = xn["LastName"].InnerText;
  Console.WriteLine("Name: {0} {1}", firstName, lastName);
}

【讨论】:

  • 我经常发现路径语法不起作用。但是,您也可以通过例如xml["Names"] 访问节点。例如,如果您想访问result/statusCode,可以使用xmlNode["result"]["statusCode"].InnerText 访问它(这将为您提供result/statusCode 的第一个实例的值)。
  • 这个优秀的例子抄自csharp-examples.net/xml-nodes-by-name
  • 太棒了!复制,但在这个平台上是第一个。
  • 你能看看我的question之一
【解决方案2】:

使用Linq to xml

添加对 System.Xml.Linq 的引用

并使用

XDocument.Parse(string xmlString)

编辑:Sample 如下,xml 数据 (TestConfig.xml)..

<?xml version="1.0"?>
<Tests>
  <Test TestId="0001" TestType="CMD">
    <Name>Convert number to string</Name>
    <CommandLine>Examp1.EXE</CommandLine>
    <Input>1</Input>
    <Output>One</Output>
  </Test>
  <Test TestId="0002" TestType="CMD">
    <Name>Find succeeding characters</Name>
    <CommandLine>Examp2.EXE</CommandLine>
    <Input>abc</Input>
    <Output>def</Output>
  </Test>
  <Test TestId="0003" TestType="GUI">
    <Name>Convert multiple numbers to strings</Name>
    <CommandLine>Examp2.EXE /Verbose</CommandLine>
    <Input>123</Input>
    <Output>One Two Three</Output>
  </Test>
  <Test TestId="0004" TestType="GUI">
    <Name>Find correlated key</Name>
    <CommandLine>Examp3.EXE</CommandLine>
    <Input>a1</Input>
    <Output>b1</Output>
  </Test>
  <Test TestId="0005" TestType="GUI">
    <Name>Count characters</Name>
    <CommandLine>FinalExamp.EXE</CommandLine>
    <Input>This is a test</Input>
    <Output>14</Output>
  </Test>
  <Test TestId="0006" TestType="GUI">
    <Name>Another Test</Name>
    <CommandLine>Examp2.EXE</CommandLine>
    <Input>Test Input</Input>
    <Output>10</Output>
  </Test>
</Tests>

C# 用法...

XElement root = XElement.Load("TestConfig.xml");
IEnumerable<XElement> tests =
    from el in root.Elements("Test")
    where (string)el.Element("CommandLine") == "Examp2.EXE"
    select el;
foreach (XElement el in tests)
    Console.WriteLine((string)el.Attribute("TestId"));

此代码产生以下输出: 0002 0006

【讨论】:

    【解决方案3】:

    根据您想要的文档类型,您可以使用XmlDocument.LoadXml 或XDocument.Load。

    【讨论】:

      【解决方案4】:

      试试这个代码:

      var myXmlDocument = new XmlDocument();
      myXmlDocument.LoadXml(theString);
      

      【讨论】:

      • 投反对票 -> 方法Load的签名是:void Load(string filename)
      • 方法是LoadXml,然后是myXmlDocument.LoadXml(theString);
      猜你喜欢
      • 2011-07-24
      • 2011-02-03
      • 2022-01-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-14
      • 2013-03-19
      • 1970-01-01
      相关资源
      最近更新 更多