2011-01-27 24 views
1

LinqXMLを使用してXMLファイルを作成しています。私は、xmlファイルを作成したら、私はちょうどそれが元のようなものであるとして、必要 Steet,<BR&gt </BR&gtとしてLINQ to XML XElementノード

string value = "Steet,<BR> </BR> City"; 
XElement address = new XElement("Address", value); 

、アドレス値が示されています。あなたはその原料がうまく形成されない場合はまあそれ

答えて

4

を維持するためにCDATAでラップする必要があります(でも、それがうまく形成されない場合)

+0

Martinに感謝します。私が新しい投票をしているので、1だけ増やすことができます。この例でもう一度おねがいします。 – dps123

+0

これは実際には元のバージョンと機能的に同じです。 '<'を '<'またはCDATAでエスケープするかどうかは関係ありません。いずれにしても、XMLパーサを使って '

'ノードの値を読むと、その中にリテラルな角括弧を持つ文字列が得られます。 –

+0

こんにちはJoel、お返事ありがとうございます。このXMLはPDFファイルの生成に使用されます。したがって、PDF Creationのメンバーはタグを期待しているため、そのツールでマップすることができます。例えば、(
=> PDF改行) – dps123

0

その後、XMLとして扱うことができるように期待しないでください。したがって、整形されていないHTMLマークアップをXML要素に入れる場合は、CDATAセクションを使用することを検討してください。

あなたがXMLとして値を解析したい場合は、例えば、フラグメントモードでのXmlReaderとそう

<Address><![CDATA[Steet,<BR> </BR> City]]></Address> 

になります

string value = "Steet,<BR> </BR> City"; 
    XElement address = new XElement("Address", new XCData(value)); 

<Address>Steet,<BR> </BR> City</Address> 
+0

ありがとうございますlvanonv。 – dps123

1

になり

static void Main() 
{ 
    string value = "Steet,<BR> </BR> City"; 
    XElement address = new XElement("Address", ParseFragment(value)); 
    Console.WriteLine(address); 
} 

static IEnumerable<XNode> ParseFragment(string fragment) 
{ 
    using (StringReader sr = new StringReader(fragment)) 
    { 
     using (XmlReader xr = XmlReader.Create(sr, new XmlReaderSettings() { ConformanceLevel = ConformanceLevel.Fragment })) 
     { 
      xr.Read(); 
      XNode node; 
      while (!xr.EOF && (node = XNode.ReadFrom(xr)) != null) 
      { 
       yield return node; 
      } 
     } 
    } 
} 

は、私はあなたが何も変更する必要はないと思います。 &lt;&gt;は、角括弧がXMLでエスケープされる方法です。 XMLパーサは、文字列値を読み取るときに自動的にリテラルな角括弧に変換します。 CDATAは、かぎ括弧をエスケープする別の方法です。この場合、両方ともまったく同じことを達成します。元のコードを取り、<Address>ノードの値をXMLパーサで読み取ると、返される文字列はStreet,<BR> </BR> Cityになります。 CDATAにエスケープする方法を変更しても、あなたのXMLを(おそらく)読みにくくすることを除いて、実際には何も変更されません。

<BR />タグを実際にXML文書の一部にしたい場合は、そのタグを文書の一部にする必要があります。言い換えれば...

new XElement("Address", "Street,", new XElement("BR"), " City")