2016-11-21 11 views
1

Visual Studioのxmlからc#の機能を使用して、xmlマークアップをC#クラスに変換しました。C#ビジュアルスタジオ生成クラスを使用してxmlマークアップを含むxmlノードからすべてのテキストを取得

<books> 
<book name="Book-1"> 
<author> 
<name>Author-1<ref>1</ref></name> 
</author> 
</book> 
<book name="Book-2"> 
<author> 
<name>Author-1<ref>1</ref></name> 
</author> 
</book> 
</books> 

変換されたクラスは、私たちが必要なもの

[System.Xml.Serialization.XmlTypeAttribute(AnonymousType = true)] 
    public partial class booksBookAuthorName 
    { 
     private byte refField;  // 1 

     private string[] textField; // 2 

が含まれていタグを保つことによって、著者名を読み込むときに出力としてAuthor-1<ref>1</ref>です。

https://msdn.microsoft.com/en-us/library/system.xml.serialization.xmltextattribute(v=vs.110).aspx属性を試しました。しかし、希望はありません。

すべての手がかり??

答えて

0

あなたはXmlElement(またはXElement)に各著者の<name>ノードのXMLをキャプチャするために[XmlAnyElement("name")]を使用することができます。あなたが望む正確なテキストは、その要素のInnerXmlです:

[XmlRoot(ElementName = "author")] 
public class Author 
{ 
    [XmlAnyElement("name")] 
    public XmlElement NameElement { get; set; } 

    [XmlIgnore] 
    public string Name 
    { 
     get 
     { 
      return NameElement == null ? null : NameElement.InnerXml; 
     } 
     set 
     { 
      if (value == null) 
       NameElement = null; 
      else 
      { 
       var element = new XmlDocument().CreateElement("name"); 
       element.InnerXml = value; 
       NameElement = element; 
      } 
     } 
    } 
} 

これはbooksBookAuthorNameクラスが不要になります。あなたのXMLに対応したクラスの完全なセットの直列化復元を示す

サンプルfiddleは、Authorは必要に応じて変更された後http://xmltocsharp.azurewebsites.net/から最初に発生しました。

+0

ありがとうございます:) – sreenivasulu

関連する問題