如何在C#中“挖掘”XML文件

时间:2014-12-03 11:27:51

标签: c# xml linq

我正试图进入元素: Xelement“Page”,属性“ID”= 1,女巫包含 XElement“Field”,属性“ID”= 1,女巫包含 带有属性“fontSize”的Xelement“textAndFont”,我试图得到的女巫值:)

XML代码是:

<?xml version="1.0" encoding="utf-8">
<Page ID="1">
  <pageProperties filPath="filename" backgroundColor="Color.BLUE" MarginLeft="0" MarginRight="0" MarginTop="0" MarginBottom="0" />
  <Field ID="1">
    <FieldProperties elementWidth="100" ElementX="30" ElementY="0" fromRight="false" fromBottom="false">
      <background imagePath="C:filePatch" BackColor="Color.WHITE" transparentBackground="false" />
    </FieldProperties>
    <textAndFont conten="SIMENS" fontSize="10" fontFamily="Arial" fontColor="new Color(34, 236, 182)" />
    <textPosition PaddintLeft="10" PaddingRight="20" PaddintTop="10" PaddingBottom="5" VerticalAlg="center" HorisontalAlg="center" />
    <textDirection wrightToTop="false" widthLocked="true" stretchingStep="10" />
  </Field>

</Page>

编辑:

我的镜头是:

 XElement xel = XElement.Load(@"xmlFile.xml");
     var prop = from propp in xel.Element("textAndFont").Attribute("fontSize")
                 where (int)propp.Element("Page").Attribute("ID")==1 &&
                 (int)propp.Element("Field").Attribute("ID")==1 select
                propp;

但它不起作用

1 个答案:

答案 0 :(得分:0)

您可能希望使用基于XPath的所需属性节点选择,这很好地反映了您的元素层次结构:

var doc = new XmlDocument();
doc.Load(@"path\to\your\xmlfile.xml");

var fontSize = doc.SelectSingleNode("/Page[@ID=1]/Field[@ID=1]/textAndFont/@fontSize");

Console.WriteLine("font size: " + fontSize.Value);

XPath表达式在Page元素处开始选择,然后选择具有值为Field的{​​{1}}属性的ID元素,获取1它下面的节点和该节点的textFont属性。返回类型是fontSize,因为属性只是文档树中的节点。

请注意,严格来说,选择XmlNode属性Page值为ID是不必要的,因为XML文件中只能有一个顶级元素。