获取 XML 节点的属性值
getting the attribute values of XML node
我正在尝试获取以下 XML 的 Arg1、2 和 3 属性的值...在 XML 中,有 2 个不同的值和通过代码的迭代已验证迭代两次。但是同样的答案显示了两次,我不知道遗漏了什么...!!!
这是 XML:
-<event type="2VO">
-<properties>
<schedule endOffset="00:00:22:00" endType="Duration" startOffset="00:00:33:00" startType="-ParentEnd"/>
<event title="Pixel VO" reconcileKey="106251137"/>
+<mediaStream>
<media Arg8="" Arg7="" Arg6="" Arg5="" Arg4="" Arg3="O1T13810" Arg2="1910" Arg1="TON" RuleCode="2VO"/>
</properties>
</event>
-<event type="2VO">
-<properties>
<schedule endOffset="00:00:22:00" endType="Duration" startOffset="00:00:33:00" startType="-ParentEnd"/>
<event title="Pixel VO" reconcileKey="106251137"/>
+<mediaStream>
<media Arg8="" Arg7="" Arg6="" Arg5="" Arg4="" Arg3="O1T13810" Arg2="1932" Arg1="TUE" RuleCode="2VO"/>
</properties>
</event>
代码如下:
static void Main(string[] args)
{
XmlDocument xdoc = new XmlDocument();
xdoc.Load(@"C:\Users\namokhtar\Desktop\testxml.xml");
foreach (XmlNode node in xdoc.SelectNodes("//event[@type='2VO']")) //or /CATALOG/CD
{
var x = node.SelectSingleNode("//@Arg1").Value;
var y = node.SelectSingleNode("//@Arg2").Value;
var z = node.SelectSingleNode("//@Arg3").Value;
Console.WriteLine("The first parameter is: " + x);
Console.WriteLine("The first parameter is: " + y);
Console.WriteLine("The first parameter is: " + z);
Console.ReadKey();
}
问题是 "//@Arg1"
中的 "//"
告诉它查看文档中的任何地方,而不是具体选择的节点,所以即使你认为你提取了每个 <event>
节点,然后,您总是会获得文档中的第一个 "//@Arg1"
属性值。
要么使用 ".//@Arg1"
告诉它相对于当前节点进行搜索,要么更具体地使用 XPath
并使用 "./properties/media/@Arg1"
如果有什么安慰的话,我觉得这个 "//"
行为不直观!
我正在尝试获取以下 XML 的 Arg1、2 和 3 属性的值...在 XML 中,有 2 个不同的值和通过代码的迭代已验证迭代两次。但是同样的答案显示了两次,我不知道遗漏了什么...!!!
这是 XML:
-<event type="2VO">
-<properties>
<schedule endOffset="00:00:22:00" endType="Duration" startOffset="00:00:33:00" startType="-ParentEnd"/>
<event title="Pixel VO" reconcileKey="106251137"/>
+<mediaStream>
<media Arg8="" Arg7="" Arg6="" Arg5="" Arg4="" Arg3="O1T13810" Arg2="1910" Arg1="TON" RuleCode="2VO"/>
</properties>
</event>
-<event type="2VO">
-<properties>
<schedule endOffset="00:00:22:00" endType="Duration" startOffset="00:00:33:00" startType="-ParentEnd"/>
<event title="Pixel VO" reconcileKey="106251137"/>
+<mediaStream>
<media Arg8="" Arg7="" Arg6="" Arg5="" Arg4="" Arg3="O1T13810" Arg2="1932" Arg1="TUE" RuleCode="2VO"/>
</properties>
</event>
代码如下:
static void Main(string[] args)
{
XmlDocument xdoc = new XmlDocument();
xdoc.Load(@"C:\Users\namokhtar\Desktop\testxml.xml");
foreach (XmlNode node in xdoc.SelectNodes("//event[@type='2VO']")) //or /CATALOG/CD
{
var x = node.SelectSingleNode("//@Arg1").Value;
var y = node.SelectSingleNode("//@Arg2").Value;
var z = node.SelectSingleNode("//@Arg3").Value;
Console.WriteLine("The first parameter is: " + x);
Console.WriteLine("The first parameter is: " + y);
Console.WriteLine("The first parameter is: " + z);
Console.ReadKey();
}
问题是 "//@Arg1"
中的 "//"
告诉它查看文档中的任何地方,而不是具体选择的节点,所以即使你认为你提取了每个 <event>
节点,然后,您总是会获得文档中的第一个 "//@Arg1"
属性值。
要么使用 ".//@Arg1"
告诉它相对于当前节点进行搜索,要么更具体地使用 XPath
并使用 "./properties/media/@Arg1"
如果有什么安慰的话,我觉得这个 "//"
行为不直观!