2016-05-22 5 views
0

私は、まさにこのようなXML文書を抽出することができました上記のコードでは、このWebサービスメソッドはXSIを追加:私のXML文書へのタイプ

XNamespace xsi = "http://www.w3.org/2001/XMLSchema-instance"; 
XAttribute attribute = new XAttribute(xsi + "type", "xsd:string"); 

XElement node_user_id = new XElement("user_id", attribute, user.code); 

XDocument doc = new XDocument(new XElement("ranzcp_user", new XAttribute(XNamespace.Xmlns + "ns1", "urn:logon"), node_user_id)); 

XmlDocument xmldoc = new XmlDocument(); 
xmldoc.LoadXml(elem.ToString()); 

を使用してXMLドキュメントタイプを抽出するためのコードがあります

<ranzcp_user xmlns:ns1="urn:logon"> 
    <user_id xmlns:p3="http://www.w3.org/2001/XMLSchema-instance" p3:type="xsd:string">12345678</user_id> 
</ranzcp_user> 

しかし、私が本当に持っている必要があることはこれです:

<ranzcp_user xmlns:ns1="urn:logon"> 
    <user_id xsi:type="xsd:string">12345678</user_id> 
</ranzcp_user> 

は私がFを必要とするフォーマットを得ることができる方法はありますxmlを解析した後、xsi:type = "xsd:string"属性が必要でしたか?

TIA!

+0

なぜ名前空間を削除しますか?エラーが出ていますか?誰がXMLを生成していますか?スキーマを使用する名前空間でエラーが発生した場合、xmlは無効であり、修正する必要があります。名前空間を削除することは難しいことです。 – jdweng

+3

@under_score 'xsi:prefix 'の宣言をしない' xsi:type'( 'xmlns:xsi =" ... "')は、XML仕様に準拠していないものになります。標準のXMLパーサーでは生成/処理できません) – har07

+0

@ har07と同意します。詳細については、「XSDでxsi:typeを使用してXML要素の値を制限する方法」(http://stackoverflow.com/questions/33808790/how-to-restrict-the-value-of-an- xml-element-using-xsitype-in​​-xsd) – kjhughes

答えて

2

あなたが正規のxsiではなくp3を使用するようにするには、明示的に名前空間接頭辞を定義することができます。

var doc = new XDocument(
    new XElement("ranzcp_user", 
     new XAttribute(XNamespace.Xmlns + "ns1", "urn:logon"), 
     new XAttribute(XNamespace.Xmlns + "xsi", xsi), 
     new XElement("user_id", 12345678, 
      new XAttribute(xsi + "type", "xsd:string") 
      ) 
     ) 
    ); 

this fiddleを参照してください。 は、名前空間接頭辞は完全に無効なXMLにつながるを削除する、と言われてきたとして、

<ranzcp_user xmlns:ns1="urn:logon" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"> 
    <user_id xsi:type="xsd:string">12345678</user_id> 
</ranzcp_user> 

をしかし - 何の準拠プロセッサは、あなたがそれを作成したり、エラーなしでそれを読んで聞かせしません:これはあなたを与えます。

「必須」XMLには、このプレフィックスが親要素の1つに宣言されていてもかまいませんか?もしそうでなければ、それは間違いであると示唆しています。属性を削除しようとする前にこれを調べるべきです。私は、消費者がXMLが無効であるときに努力をすべて元に戻すことになると思う。

+0

チャールズマージャー:これは今、今私はちょうどこのXMLテンプレートに入れて、それが彼らの部分にどのように行くのを参照する必要がありますこのタスクの古い文書を扱っている助けてください! –

関連する問題