- PR -

C#で読み込んだXMLファイルのタグを変更したい

1
投稿者投稿内容
はな
常連さん
会議室デビュー日: 2005/10/21
投稿数: 20
投稿日時: 2006-02-06 16:53
C#で読み込んだXMLファイルをC#上でタグ名を変更したいのですが、可能なのでしょうか?

もし、可能な場合、どのような方法をとればいいか教えてください。

もし、必要な情報などがありましたら、教えてください。
何が必要かもわからないので、必要な情報があったら教えてください。

C#でXMLを利用するのに不慣れなもので申し訳ありませんが、よろしくお願いいたします。
Hongliang
ぬし
会議室デビュー日: 2004/12/25
投稿数: 576
投稿日時: 2006-02-06 17:26
一番単純なのは、
  1. StreamReaderでファイルを全部読み込む
  2. Regex.Replaceでタグを置換する
  3. StreamWriterで保存する

ですが、さてそもそもどうXMLを扱ってるときにタグ名変更なんてしたくなるんでしょう?
はな
常連さん
会議室デビュー日: 2005/10/21
投稿数: 20
投稿日時: 2006-02-07 10:11
Hongliangさん

ありがとうございます。
これから試してみます。

なぜ、タグを変えなくてはいけないか、というと、他のアプリケーションで作成したXMLをそのまま私の作っているアプリケーションではタグの名前を変えないときちんと表示することが出来ないんです。

出来れば、
<Datas>
<Data>1</Data>
<Data>マンション</Data>
<Data>66</Data>
<Data>53.2</Data>
<Data>53.2</Data>
</Datas>

というものを

<Datas>
<Data0>1</Data0>
<Data1>マンション</Data1>
<Data2>66</Data2>
<Data3>53.2</Data3>
<Data4>53.2</Data4>
</Datas>

という形に変更したいと思っています。
omatsu
常連さん
会議室デビュー日: 2002/08/29
投稿数: 20
投稿日時: 2006-02-09 13:55
Regex でことは足りそうですが、
XMLなら「XSLT スタイルシートで変換」(System.Xml.Xsl.XslTransform などを使う)というのがカッコいいかも、と思い、
ためしに、「兄弟ノードに同じ名前のタグのノードがあるとき通し番号をタグ名につける」という、XSLTスタイルシートを書いてみました。
でも、書いてみて思ったけど、やっぱり、そもそもタグ名を変換するというのが筋違いな気が。
なんでそうしたいのか詳しい事情はわかりませんが「タグだけを見て順番を判断したい」というのであれば、まだ、通し番号を持つattributeをつける方がスジが通っている気が。

コード:
<?xml version="1.0" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="*">
    <xsl:choose>
      <xsl:when test="count(../*[name() = name(current())]) &gt; 1">
        <xsl:element name="{concat(name(), 1+count(preceding-sibling::*[name() = name(current())]))}">
          <xsl:apply-templates select="@*" />
          <xsl:apply-templates />
        </xsl:element>
      </xsl:when>
      <xsl:otherwise>
        <xsl:copy>
          <xsl:apply-templates select="@*" />
          <xsl:apply-templates />
        </xsl:copy>
      </xsl:otherwise>
    </xsl:choose>
  </xsl:template>
  <!-- attribute, PI, comment は単純コピー -->
  <xsl:template match="@* | processing-instruction() | comment()">
    <xsl:copy-of select="." />
  </xsl:template>
</xsl:stylesheet>

1

スキルアップ/キャリアアップ(JOB@IT)