合并文档中的XML节点

时间:2015-05-22 12:28:13

标签: xml excel xslt

我有一个由MS Excel创建的XML文档。我想要的是组合具有相同ID的节点。我目前拥有的xml是这样的:

<ns1:publications>
<ns1:book id="3" subType="book">
    <ns1:peerReviewed>false</ns1:peerReviewed>
    <ns1:publicationCategory>scientific</ns1:publicationCategory>
    <ns1:publicationStatus>published</ns1:publicationStatus>
    <ns1:language>en_GB</ns1:language>
    <ns1:title>
        <ns2:text lang="en" country="EN">Kirja3</ns2:text>
    </ns1:title>
    <ns1:abstract>
        <ns2:text lang="en" country="EN">
    </ns1:abstract>
    <ns1:persons>
        <ns1:author>
            <ns1:role>author</ns1:role>
            <ns1:person external="false" id="3">
                <ns1:firstName>Rob</ns1:firstName>
                <ns1:lastName>Hubbard</ns1:lastName>
            </ns1:person>
        </ns1:author>
    </ns1:persons>
    <ns1:organisations>
        <ns1:organisation id="220400"/>
    </ns1:organisations>
    <ns1:owner id="220400"/>
    <ns1:publicationDate>
        <ns2:year>2014</ns2:year>
    </ns1:publicationDate>
    <ns1:visibility>Public</ns1:visibility>
    <ns1:numberOfPages>655</ns1:numberOfPages>
    <ns1:placeOfPublication>Newcastle</ns1:placeOfPublication>
</ns1:book>
<ns1:book id="3">
    <ns1:title/>
    <ns1:abstract/>
    <ns1:persons>
        <ns1:author>
            <ns1:person id="4">
                <ns1:firstName>Chris</ns1:firstName>
                <ns1:lastName>Steward</ns1:lastName>
            </ns1:person>
        </ns1:author>
    </ns1:persons>
    <ns1:organisations>
        <ns1:organisation id="220400"/>
    </ns1:organisations>
    <ns1:owner id="220400"/>
    <ns1:publicationDate/>
</ns1:book>

它应该是这样的:

<ns1:publications>
<ns1:book id="3" subType="book">
    <ns1:peerReviewed>false</ns1:peerReviewed>
    <ns1:publicationCategory>scientific</ns1:publicationCategory>
    <ns1:publicationStatus>published</ns1:publicationStatus>
    <ns1:language>en_GB</ns1:language>
    <ns1:title>
        <ns2:text lang="en" country="EN">Kirja3</ns2:text>
    </ns1:title>
    <ns1:abstract>
        <ns2:text lang="en" country="EN">
    </ns1:abstract>
    <ns1:persons>
        <ns1:author>
            <ns1:role>author</ns1:role>
            <ns1:person external="false" id="3">
                <ns1:firstName>Rob</ns1:firstName>
                <ns1:lastName>Hubbard</ns1:lastName>
            </ns1:person>
        </ns1:author>
        <ns1:author>
            <ns1:person external="false" id="4">
                <ns1:firstName>Chris</ns1:firstName>
                <ns1:lastName>Steward</ns1:lastName>
            </ns1:person>
        </ns1:author>
    </ns1:persons>
    <ns1:organisations>
        <ns1:organisation id="220400"/>
        <ns1:organisation id="220300"/>
    </ns1:organisations>
    <ns1:owner id="220400"/>
    <ns1:publicationDate>
        <ns2:year>2014</ns2:year>
    </ns1:publicationDate>
    <ns1:visibility>Public</ns1:visibility>
    <ns1:numberOfPages>655</ns1:numberOfPages>
    <ns1:placeOfPublication>Newcastle</ns1:placeOfPublication>
</ns1:book>

数据来自Excel电子表格,其中包含有关行的信息。例如,book可以有多个作者,它们位于第一列具有相同id的单独行上。

1 个答案:

答案 0 :(得分:0)

我建议您使用xml序列化从xml导入数据,通过c#类操作数据并以xml格式输出。有关更多信息,请参阅此post

您的阅读方式如下:

MyClass myObject = new MyClass;
XmlSerializer ser = new XmlSerializer(myObject.GetType());
using (FileStream fs = new FileStream(FilePath, FileMode.Open))
{
    XmlTextReader reader = new XmlTextReader(fs);
    myObject = (MyClass)ser.Deserialize(reader);
}

一旦获得该类,通过linq或循环合并/删除节点将很容易。