从xml中提取字符串

本文关键字:字符串 提取 xml | 更新日期: 2023-09-27 18:12:34

xml来自一个url,所有我需要的是拉字符串"N0014E1"从它。我不确定为什么这个代码不工作。我在它周围放了一个try块,我得到一个"Data root level is invalid"

xml:

<obj is="c2g:Network " xsi:schemaLocation="http://obix.org/ns/schema/1.0/obi/xsd" href="http://192.168.2.230/obix/config/">
  <ref name="N0014E1" is="c2g:LOCAL c2g:Node"xsi:schemaLocation="http://obix.org/ns/sc/1.0/obix/xsd" href="N0014E1/"></ref>
</obj>

c#代码:

    public static string NodePath = "http://" + MainClass.IpAddress + ObixPath;

    public static void XMLData()
    {
        XmlDocument NodeValue = new XmlDocument();
        NodeValue.LoadXml(NodePath);

        var nodes = NodeValue.SelectNodes(NodePath);
        foreach (XmlNode Node in nodes)
        {
            HttpContext.Current.Response.Write(Node.SelectSingleNode("//ref name").Value);
            Console.WriteLine(Node.Value);
        }
        //Console.WriteLine(Node);
        Console.ReadLine();
    }

从xml中提取字符串

您的SelectNodesSelectSingleNode命令不正确。两者都需要一个xpath字符串来标识节点。

试试下面的

string xml = @"<obj is=""c2g:Network "" href=""http://192.168.2.230/obix/config/""><ref name=""N0014E1"" is=""c2g:LOCAL c2g:Node"" href=""N0014E1/""></ref></obj>";
XmlDocument NodeValue = new XmlDocument();
NodeValue.LoadXml(xml);
XmlNode r = NodeValue.SelectSingleNode("//ref[@name]");
if (r != null)
{
    System.Diagnostics.Debug.WriteLine(r.Attributes["name"].Value);
}

另外,注意,LoadXml方法只是加载一个xml字符串;它不会从远程url加载。

正如@kevintdiy指出你的xml不完全正确。在上面的示例中,我已经剥离了xsi参考,因为您缺乏它的定义。

如果您可以访问源xml,要么删除对xsi的引用(如果不需要的话),要么在根节点中为它添加一个定义。

如果这是不可能的,那么您可能需要考虑使用正则表达式或其他基于字符串的方法来获取值。