0

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

1 に答える 1

0

SelectNodesコマンドとSelectSingleNodeコマンドが正しくありません。両方とも、ノードを識別するために 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不要であれば削除するか、その定義をルート ノードに追加します。

これが不可能な場合は、正規表現またはその他の文字列ベースのメソッドを使用して値を取得することを検討してください。

于 2013-05-08T16:22:31.963 に答える