我正在解析一个xml文档,我需要找出gid(属性)值(3810).
基于SelectSingleNode().我发现找到属性名称和它的值并不容易.
我可以使用此方法还是必须切换到其他方式.
附上是我的代码.
如何使用bookOBJ获取属性值3810的gid.谢谢.
我的test.xml文件如下
<?xml version="1.0" ?>
<root>
<VersionInfo date="2007-11-28" version="1.0.0.2" />
<Attributes>
<AttrDir name="EFEM" DirID="1">
<AttrDir name="Aligner" DirID="2">
<AttrDir name="SequenceID" DirID="3">
<AttrObj text="Slot01" gid="3810" unit="" scale="1" />
<AttrObjCount value="1" />
</AttrDir>
</AttrDir>
</AttrDir>
</Attributes>
</root>
Run Code Online (Sandbox Code Playgroud)
我写了test.cs如下
public class Sample
{
public static void Main()
{
XmlDocument doc = new XmlDocument();
doc.Load("test.xml");
XmlNode book;
XmlNode root = doc.DocumentElement;
book = root.SelectSingleNode("Attributes[AttrDir[@name='EFEM']/AttrDir[@name='Aligner']/AttrDir[@name='SequenceID']/AttrObj[@text='Slot01']]");
Console.WriteLine("Display the modified XML document....");
doc.Save(Console.Out);
}
}
Run Code Online (Sandbox Code Playgroud)
[更新06/10/2010]
xml文件是一个复杂的文件.包括成千上万的gids.但对于每个Xpath,gid都是独一无二的.
我将xml文件加载到TreeView控件.this.treeView1.AfterSelect += new System.Windows.Forms.TreeViewEventHandler(this.treeView1_AfterSelect);.当treeView1_AfterSelect事件发生时,e.Node.FullPath会返回一个字符串值.
我解析字符串值e.Node.FullPath.然后我得到了XPath Above的成员.然后我试图找到选择了哪个gid项目.
我确实需要找到gid值作为返回值.
你可以写
XmlAttribute gidAttribute = (XmlAttribute)book.Attributes.GetNamedItem("gid");
String gidValue = null;
if (gidAttribute!=null)
value = gidAttribute.Value;
Run Code Online (Sandbox Code Playgroud)
或者,展开Xpath以获取属性,例如
Attributes[AttrDir[@name='EFEM']/AttrDir[@name='Aligner']/AttrDir[@name='SequenceID']/AttrObj[@text='Slot01']]/@gid
Run Code Online (Sandbox Code Playgroud)
如果@gid是唯一的,那么您可以简单地使用Xpath
"//AttrObj[@gid='3810']"
Run Code Online (Sandbox Code Playgroud)
获取具有给定id的所需节点.但请注意,每个请求都将搜索整个文档.获取所有节点,然后将它们放在一个由id键入的地图中会更有效.
"//AttrObj[@gid]"
Run Code Online (Sandbox Code Playgroud)
使用XmlNode.SelectNodes具有@gid属性来获取所有AttrObj的列表.
您可以不查询XmlDocument自身DocumentRoot:
XmlDocument doc = new XmlDocument();
XmlNode book = doc.SelectSingleNode("..");
if (book != null)
{
XmlAttribute gid = book.Attributes["gid"];
if (gid != null)
{
string value = gid.Value;
}
}
Run Code Online (Sandbox Code Playgroud)