我试图将XML元素添加到文档中,并且我对命名空间感到非常困惑。 有人可以指出我在下面做错了吗?
之前的Xml:
...
<TaxKeywordTaxHTField xmlns="e907f980-2644-454c-b5eb-278bd59dc318">
<Terms xmlns="http://schemas.microsoft.com/office/infopath/2007/PartnerControls"/>
</TaxKeywordTaxHTField>
...
之后需要Xml:
...
<TaxKeywordTaxHTField xmlns="e907f980-2644-454c-b5eb-278bd59dc318">
<Terms xmlns="http://schemas.microsoft.com/office/infopath/2007/PartnerControls">
<TermInfo xmlns="http://schemas.microsoft.com/office/infopath/2007/PartnerControls">
<TermName>Kenya</TermName>
<TermId>283e7636-3eca-4a6c-8ea7-5c1b768b8f2b</TermId>
</TermInfo>
</Terms>
</TaxKeywordTaxHTField>
...
我的代码创建了以下内容:
...
<TaxKeywordTaxHTField xmlns="e907f980-2644-454c-b5eb-278bd59dc318">
<Terms xmlns="http://schemas.microsoft.com/office/infopath/2007/PartnerControls">
<TermInfo>
<TermName xmlns="">Kenya</TermName>
<TermId xmlns="">283e7636-3eca-4a6c-8ea7-5c1b768b8f2b</TermId>
</TermInfo>
</Terms>
</TaxKeywordTaxHTField>
...
这是我的代码:
var terms = DocumentManagment.Descendants(ns4 + "TaxKeywordTaxHTField")
.Descendants(ns2 + "Terms").SingleOrDefault();
terms.AddFirst(
new XElement(ns2 + "TermInfo",
new XElement("TermName", "Kenya"),
new XElement("TermId", "283e7636-3eca-4a6c-8ea7-5c1b768b8f2b")));
答案 0 :(得分:1)
TermName
和TermId
都位于命名空间"http://schemas.microsoft.com/office/infopath/2007/PartnerControls"
中,因此只需将此命名空间添加到其名称中:
terms.AddFirst(
new XElement(ns2 + "TermInfo",
new XElement(ns2 + "TermName", "Kenya"),
new XElement(ns2 + "TermId", "283e7636-3eca-4a6c-8ea7-5c1b768b8f2b")));
这将生成以下xml:
<TaxKeywordTaxHTField xmlns="e907f980-2644-454c-b5eb-278bd59dc318">
<Terms xmlns="http://schemas.microsoft.com/office/infopath/2007/PartnerControls">
<TermInfo>
<TermName>Kenya</TermName>
<TermId>283e7636-3eca-4a6c-8ea7-5c1b768b8f2b</TermId>
</TermInfo>
</Terms>
</TaxKeywordTaxHTField>
注意:因此TermInfo
在与其父元素相同的默认命名空间中,则名称空间只是被继承而且未明确声明。
另外请记住,如果您没有为元素指定名称空间,那么它被认为是在None名称空间中。但是,如果父元素已经定义了由子元素继承的默认命名空间,则应该显式声明此空命名空间。这就是你在输出中看到xmlns=""
的原因。