【问题标题】:Pulling string from xml从xml中提取字符串
【发布时间】:2013-05-02 22:34:26
【问题描述】:

xml 来自一个 url,我只需要从中拉出字符串“N0014E1”。我不确定为什么这段代码不起作用。我在它周围放了一个 try 块,我得到一个“数据根级别无效”

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();
    }

【问题讨论】:

  • 看起来objis之间应该有一个空格?
  • 这就是 XML 的全部内容吗?如果是,则它是无效的 XML,这就是您收到错误的原因。开始标签是 objis,结束标签是 obj - 开始和结束标签必须匹配。
  • obj 和 is 之间有一个空格,它只是没有复制,对此感到抱歉。是的,这是整个 xml 页面。

标签: c# xml url httpcontext


【解决方案1】:

您的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 的引用(如果不需要)或将其定义添加到根节点。

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

【讨论】:

  • 即使它的 xml 无效?
  • @kevintdiy 你确实是正确的,它缺少xsi 的定义。更新了我的回复。
  • 好的,我无权更改无效的 xml。您是否建议我使用通配符搜索字符串?
猜你喜欢
  • 2013-07-22
  • 2013-08-28
  • 1970-01-01
  • 1970-01-01
  • 2013-12-10
  • 2014-08-30
  • 2020-09-23
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多