• ベストアンサー

.netのXmlDocumentを使ってテキストノードのタブや改行を無視する方法

.NETのXmlDocumentオブジェクト等を使って、XMLファイルを読み込むプログラムを作っているのですが、 XmlNode.InnerTextでテキストノードの値を取得した場合、 タブや改行を含んだテキストが取得されてしまいます。 文字の部分だけを取得したいのですが、方法がわかりません。 ご存知の方が折られましたら、ご教示ください。 よろしくお願いいたします。 ---- <Example> (TAB)あいう(改行) </Example> とある場合、「あいう」だけ取得したいのですが、 「(TAB)あいう(改行)」と取得されてしまいます。

  • XML
  • 回答数2
  • ありがとう数5

質問者が選んだベストアンサー

  • ベストアンサー
  • yotchan2
  • ベストアンサー率61% (8/13)
回答No.2

タブ:\t 改行:\n(\r\nの場合もありますが・・) を、Replaceメソッドを使って取っ払ってやるといいです。 string text = "(TAB)あいう(改行)".Replace("(TAB)", "").Replace("(改行)", ""); こういった形は、多数あるとめんどいので、メソッドにしてしまうと よいかと思われます。 private static string hoge(string text){ string ret = text.Replace("(TAB)", "").Replace("(改行)", ""); return ret; }

kurage-fuwari
質問者

お礼

現状、取得後に削除しております。 たしかに、関数化しておくと便利ですね(^^) アドバイス有難うございました。

その他の回答 (1)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

そのような文字が必要な場合もあるでしょうから、取得した側で空白文字を削除するとイイと思います。 String.Trim() を使うと前後の空白文字を削除できます。

kurage-fuwari
質問者

お礼

やはり、取得後に削除することになるのですね。 (実は現状、上記の方法で対応しています。) アドバイス有難うございました。

関連するQ&A

  • 改行がノード?(JAXP)

    xmlのノードについてですが、 <talkset> <name type="first">abc</name> <comment>hello!!</comment> </talkset> というxmlファイルがあった場合に、 JAXPでの、getNodeList()で全てのノードリストを 得ます(mynodelist=root.getNodeList())。 ここで、mynodelist.item(i)として、 上から、ノードを見ていくプログラムを作ったの ですが、 まず、最初にテキストノード(<talkset>の横の改行) 、次に<name>ノードがきて、次にテキストノード( </name>の横の改行?)が取り出されます。 この場合、本来、<name>ノードの後は属性ノードである type、次に、テキストノード(abc)そしてその後に、 改行(テキストノード)が取り出されるべきだと思う のですが、そうなりません(type属性と、abcが、 ノードとして、取り出せない)。 なにか分かる人、お願いします。

    • ベストアンサー
    • XML
  • 秀丸を使ってTABを改行で表示

    秀丸を使用して、テキストファイル内のTABを改行で表示したいのでが、簡単な方法ありますか? 例として 1(TAB)2(TAB)3(TAB)4      ↓ 1 2 3 4 という風に表示させたいのです。よろしくお願いします。

  • xpath でn番目のテキストノード取得

    xpathで//text()とするとすべてのテキストノードが取得できますが、 この中からn番目のテキストノードを取得することは可能でしょうか? (プログラムでループではなく、xpathで。) <?xml version='1.0'?> <root><foo>aaa</foo><bar>bbb</bar><buz>bbb</buz></root> //text()[1]でaaaがとれるかと思ったんですが。。。 よろしくお願いします。

    • ベストアンサー
    • XML
  • テキストボックスに改行を含む値を表示する場合

    テキストファイルより1行ずつ値を改行「chr(13)」でつなげて取得し、それを テキストボックスに表示させたいのですが、そのまま値をテキストボックスの textプロパティに設定すると、改行が「・」で表示され改行されていません。 テキストボックスのプロパティでMultiLineもTrueにしてあるのですが、これは 無理なことなのでしょうか? 一行ずつ取得してテキストボックスに表示する際に改行を設定していくしかない のでしょうか? 詳しい方いらっしゃいましたらご教示ください。 よろしくお願いいたします。

  • C#のXmlDocumentについて

    C#のXmlDocumentについて質問です。 using System; using System.Xml; using System.Windows; public class XmlNewClass{ public static void Main(String [] args){ XmlDocument xmlObj = new XmlDocument(); xmlObj.Load("./test.xml"); XmlNode nodeObj = xmlObj.GetElementsByTagName("root").Item(0); Console.WriteLine(nodeObj); } } 上記のようなコードがあったとします。 この場合、プロンプトに表示されるないようは 〔System.Xml.XmlElement〕という記述が出力されます。 次に XmlElement elementObj =nodeObj; というコードを追加したとします。 それを実行してみると /****************************************************************** xml.cs(21,26): error CS0266: 型 'System.Xml.XmlNode' を 'System.Xml.XmlElement' に暗黙的に変換できません。明示的な変換が存在します。(cast が不足していないかどうかを確認してください) ***************************************************************************/ というようなエラーがプロンプト上に表示されます。 これはnodeObjがXmlNodeというクラスだということですが (実際GetElementsByTagNameで帰って来るオブジェクトはXmlNodeというクラスだとマニュアルにも記載がありました) なぜ冒頭のコードで Console.WriteLine(nodeObj); の箇所の出力で〔XmlElement〕という内容が出力されたのでしょうか? 同じオブジェクトなのに、なぜ出力と型がことなるのでしょうか? ご教授よろしくお願いします。

  • xmlの値を配列に格納したいんですけどエラーがでてしまう。

    <?xml version="1.0" encoding="UTF-8" ?> <Dataroot> <aaa> <bbb> <ccc>値1</ccc> </bbb> <bbb> <ccc>値2</ccc> </bbb> </aaa> </Dataroot> ---------------------------------------------------------------- のようなXML文書がある時<ccc></ccc>の値を取り出す場合 ---------------------------------------------------------------- Imports System Imports System.IO Imports System.Xml public class Sample public shared sub Main() Dim doc as XmlDocument = new XmlDocument() doc.Load("data.xml") 'XML文書の読み込み Dim root as XmlElement = doc.DocumentElement Dim nodeList as XmlNodeList nodeList = root.SelectNodes("/Dataroot/aaa/bbb")'/cccまでやる方が簡単 Dim node as XmlNode Dim ccclist() As String = Nothing for each node in nodeList ccclist(nodeList.Count) = node.SelectSingleNode("ccc").InnerText '内容の取り出し next end sub end class としているのですが ccclist(nodeList.Count) = node.SelectSingleNode("ccc").InnerText '内容の取り出し この行で オブジェクト参照がオブジェクト インスタンスに設定されていません。 とエラーがでて困っています。 これはどのように修正すればよろしいでしょうか? 教えてください。お願いします。

  • XPathGraphでノードの値を取得できない

    IT戦記経由で知った http://d.hatena.ne.jp/amachang/20080425/1209098271 XPathGraph http://xpath.kayac.com/ なるサービスがあります。 テストのために, Windows Live SkyDriveにアップロードした http://qfrfbw.bay.livefilestore.com/y1pR1j83PrREpBohBHZsCgD8GDU8FdFa4EArE7o6flrxaCyM3pSbtxD69QyPvue3X2p2-97-V9oNadelUXUfaHXaA/20080430-2.xml のtest要素のテキストノードを数値として扱った時の値55を取得しようと URLを打ち込み XPathを number(/test/text()) としたのですが, 値が取得できませんでした とされてしまいました。 何か条件が足りないのでしょうか?

    • 締切済み
    • XML
  • テキストエリアでの改行の仕方

    MP3ファイルを右クリックしてプロパティを表示し、 概要タブで詳細設定を選択して、 プロパティが「歌詞」の値に歌詞を書き込みたいのです。 値のところをクリックすると、テキストエリアが出てくるのですが、 そこで文字を入力し、Enterキーを押すと決定になってしまい、 改行が入力できません。 Shift+EnterやAlt+Enterなども試してみましたが、 できませんでした。 改行をするにはどうしたら良いでしょうか? ご存知の方、どうぞ教えてください。 宜しくお願い致します。

  • テキストエリアに改行入りのテキストを挿入したい。

    テキストエリアに外部から取得したテキストを読み込みたいと思っています。 そのテキストを、以下のコードのように'|'を'\n'に置換します。 このようにテキストに改行(\n)が入っていると、 オブジェクトを指定してください。というスクリプトエラーが発生するようです。 やりたいことは、テキストエリアに改行つきのテキストを挿入したい。 ということです。 何か良い方法はないでしょうか。 <script language="JavaScript"> function init(){   with(document.testform){ <% String text_abc = (String)request.getAttribute("test"); text_abc = text_abc.replace('|','\n'); %> textareaAAA.value="<%=text_abc%>";   } } </script>

  • XSLTで、あるノードの Text を別なノードの Name として参照

     変換したいXML文書の最初のトップレベルノードの階層をたどって text を拾っていくと、その text に一致する name のノードが次のトップレベルノードの階層で、出現するようになっています。  そこで、まず、最初のノードの階層をたどっていって、その順序で、2番目のノードから値を引いてきて表示させたいのです。 ■変換したい XML 文書 DataDocument.xml <datadocument> <setteischema> <sitem>solution <scategory>solution1</scategory> </sitem> <sitem>itsales <scategory>itsales1</scategory> </sitem> </setteischema> <setteivalue> <solution> <solution1>ソリューション1</solution1> </solution> <itsales> <itsales1>ITセールス1</itsales1> </itsales> </setteivalue> </datadocument> それに対して、適用したい XSL は次のようなものです。 ■変換命令を記述したXSL文書 StyleDocument.xsl <xsl:template match="setteischema" > <xsl:for-each select="*"> <xsl:variable name="foo" select="text()"/> <xsl:for-each select="*"> <xsl:variable name="bar" select="text()"/> <xsl:value-of select="★1" /> </xsl:for-each> </xsl:for-each> </xsl:template> 実際は★1の部分で setteivalue/$foo/$var といったパスで得られるノードのテキストを表示させたいのです。 どうしたらできますか? よろしくお願いします。

    • ベストアンサー
    • XML

専門家に質問してみよう