我可以使用Linq to Xml来改变XSD吗?

时间:2009-12-29 21:31:05

标签: linq linq-to-xml

我在XSD中有一个我想要修改的节点。我想更改此节点中的“name”值:

<xs:element name="NewDataSet" msdata:IsDataSet="true" msdata:UseCurrentLocale="true">

然而,当我尝试通过此代码找到该节点时,我得到没有节点或错误,这取决于我尝试的。

xsdDoc.Descendants("element").Where(x => x.Attribute("name").Value == "NewDataSet").Single().SetAttributeValue("name", "newValue");

Linq To Xsd不是一个选项,因为它看起来像是开源的,这将意味着各种繁文缛节(在工作中)。

这可能,或者我运气不好?

相关(但不相同):Linq to XML - update/alter the nodes of an XML Document

2 个答案:

答案 0 :(得分:3)

“xs”命名空间需要一个XNamespace,然后需要使用xsdDoc.Descendants(ns+"element")


XNamespace xs = "http://www.w3.org/2001/XMLSchema";
doc.Descendants(xs + "element").
    Where(x.Attribute("name") != null 
    &&  x => x.Attribute("name").Value == "NewDataSet").First().
    SetAttributeValue("name", "newValue");

答案 1 :(得分:1)

只是一个猜测,但它可能是一个命名空间问题,尝试使用LocalName,就像这个问题:

Ignore namespaces in LINQ to XML