0

我知道这是一个非常基本的问题,但我是 XML 新手,虽然它看起来很简单,但我在任何地方都找不到简单的答案。我有一个如下所示的 XML 文档:

<?xml version="1.0" encoding="UTF-8"?>
<root version="1">
<targets>
    <target type="email">
        <property name="to">b1q23@email.com</property>
    </target>
    <target type="fob"/>
</targets>
<observation uniqueID="00A60D" deviceID="308610ea23">
    <field name="field1">test1</field>
    <field name="field2">test2</field>
</observation>

我正在尝试选择该 xml 的一个子集,或删除节点,以将其缩减为:

    <observation uniqueID="00A60D" deviceID="308610ea23">
    <field name="attachments">
        <string>1910.jpg</string>
    </field>
    <field name="field1">test1</field>
    <field name="field2">test2</field>
</observation>

这样我就可以将它反序列化为一个对象。任何帮助是极大的赞赏。

4

3 回答 3

1

您可以使用 XPath:

string xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" +
        "<root version=\"1\">" +
        "<targets>" +
            "<target type=\"email\">" +
                "<property name=\"to\">b1q23@email.com</property>" +
            "</target>" +
            "<target type=\"fob\"/>" +
        "</targets>" +
        "<observation uniqueID=\"00A60D\" deviceID=\"308610ea23\">" +
            "<field name=\"field1\">test1</field>" +
            "<field name=\"field2\">test2</field>" +
        "</observation>" +
        "</root>";

XmlDocument doc = new XmlDocument();
doc.LoadXml(xml);

XmlElement root = doc.DocumentElement;
var observationNode = root.SelectSingleNode("/root/observation");

var observationXml = observationNode.OuterXml;
于 2013-10-04T12:24:12.730 回答
1

这是一个 XML 到 LINQ 版本:

dynamic root= XElement.Load(dataStream).Descendants("root")
                        .Select(element => element.Value).ToArray();

这将提供root文档中的所有元素。您可以访问 root

于 2013-10-04T12:29:28.153 回答
0
XElement root = XElement.Parse("<root version ..." // etc. to parse a string. 
// Use XElement.Load to load a file.

var observations = root.Elements("observation");

它假定一个根(根据定义)和可能的多个observation元素。

于 2013-10-04T12:29:23.300 回答