2009-12-29 2 views
1

수정하고 싶은 XSD에 노드가 있습니다. 나는이 노드에서 "이름"값을 변경하려면 :XSD를 변경하기 위해 Linq를 XML에 사용할 수 있습니까?

<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에 XSD하려면이 옵션을 선택하지 않습니다.

이것이 가능합니까 아니면 운이 좋지 않습니까?

관련 (하지만 동일) : Linq to XML - update/alter the nodes of an XML Document

답변

3

그런 다음 xsdDoc.Descendants(ns+"element")를 사용해야은 "XS"네임 스페이스에 대한 XNamespace가 필요합니다.


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"); 
+0

을 "에 http : //www.w3를 .org/2001/XMLSchemaelement "? 그건 옳은 것처럼 보이지 않지만 어디로 가는지 볼 수 있습니다 ... – jcollum

+0

아, 이렇게 : XNamespace xn = "http://www.w3.org/2001/XMLSchema"; IEnumerable elems = xsdDoc.Descendants (xn + "element") 여기서 ( x => x.Attribute ("name"). 값 == "NewDataSet"); – jcollum

+0

이 전체 XDocument/X * 네임 스페이스는 조금 이상합니다. – jcollum

1

그냥 추측하지만,이 네임 스페이스 지정에 문제가 될 수이 질문에 같은 localName를 사용해보십시오 : 지금처럼

Ignore namespaces in LINQ to XML

관련 문제