C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[2]: XML結合処理


(過去ログ 17 を表示中)

[トピック内 4 記事 (1 - 4 表示)]  << 0 >>

■6248 / inTopicNo.1)  XML結合処理
  
□投稿者/ トラヤ (1回)-(2007/08/06(Mon) 23:24:04)

分類:[VB.NET/VB2005] 

現在vb.net(2003)で作業しているのですが、
XMLのデータを照合して一つのファイルとして出力する処理をしたいのですが、うまくできません。こんな初心者にやり方を教えていただけたら助かります。

ちなみに中身としては
<common>
<test name="AAA">
<section name="bbb">
<key name="111" value="???" />
<key name="222" value="!!!!!" />
<key name="333" value="//" />
</section>
</test>
</common>
これが元データで

<common>
<test name="AAA">
<section name="bbb">
<key name="222" value="zzz" />
</section>
</test>
</common>
これが比較したいデータです。

これらのファイルを
<common>
<test name="AAA">
<section name="bbb">
<key name="111" value="???" />
<key name="222" value="zzz" />
<key name="333" value="//" />
</section>
</test>
</common>
このように指定比較したいデータで上書きするような内容のものを作りたいです。
ファイルのパスは中のプログラムで取得するようになっています。

なにかよい方法があればアドバイスお願いします。
環境についてですが、
Visual Studio 2003
Visual Basic .NET
Windows Application
で作成しています。
引用返信 編集キー/
■6250 / inTopicNo.2)  Re[1]: XML結合処理
□投稿者/ 通りすがった (1回)-(2007/08/07(Tue) 00:55:32)
情報共有のためにマルチポストサイトをリンクしときます。
http://vbnet-iku2.hp.infoseek.co.jp/cgi-bin/treecrsdx02/index.cgi?m=look&bnum=3172
引用返信 編集キー/
■6252 / inTopicNo.3)  Re[1]: XML結合処理
□投稿者/ 魔界の仮面弁士 (370回)-(2007/08/07(Tue) 05:33:39)
2007/08/07(Tue) 06:01:30 編集(投稿者)
No6248 (トラヤ さん) に返信
> XMLのデータを照合して一つのファイルとして出力する処理をしたいのですが、うまくできません。

とりあえず、結合結果を TextBox に表示させてみました。

============================
Dim sXSLT As String = System.IO.Path.Combine(sDir, "XSLT.xsl")  '後述

Dim sXML1 As String = System.IO.Path.Combine(sDir, "XML1.xml")   '元データ
Dim sXML2 As String = System.IO.Path.Combine(sDir, "XML2.xml")   '上書き用の比較データ

Dim xslt As New System.Xml.Xsl.XslTransform()
xslt.Load(sXSLT)

Dim doc1 As New System.Xml.XPath.XPathDocument(sXML1)

Dim xslArg As New System.Xml.Xsl.XsltArgumentList()
xslArg.AddParam("DataFile", "", sXML2)

Dim outStream As New System.IO.MemoryStream()

xslt.Transform(doc1, xslArg, outStream)

outStream.Position = 0
Dim reader As New IO.StreamReader(outStream)

TextBox1.Text = reader.ReadToEnd()

reader.Close()
============================


以下、結合処理用の XSLT ファイルです。

============================
<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:output method="xml"/>
  <xsl:param name="DataFile" />

  <xsl:template match="key">
   <xsl:variable name="test" select="document($DataFile)/common/test" />
    <xsl:variable name="testName" select="../../@name"/>
    <xsl:variable name="sectionName" select="../@name"/>
    <xsl:variable name="keyName" select="@name"/>

    <xsl:variable name="value" select="$test[@name=$testName]/section[
    @name=$sectionName]/key[@name=$keyName]/@value"/>

    <key name="{@name}">
      <xsl:attribute name="value">
        <xsl:choose>
          <xsl:when test="$value"><xsl:value-of select="$value"/></xsl:when>
          <xsl:otherwise><xsl:value-of select="@value"/></xsl:otherwise>
        </xsl:choose>
      </xsl:attribute>
    </key>
  </xsl:template>

  <xsl:template match="@*|*|text()">
    <xsl:copy><xsl:apply-templates select="@*|*|text()" /></xsl:copy>
  </xsl:template>
</xsl:stylesheet>
============================

<test>, <section>, <key> の各 name 属性が一致した場合のみ、value 属性を上書きし、
もし、元データ側に無い key が含まれていた場合は、その key を無視するようにしてあります。

引用返信 編集キー/
■6460 / inTopicNo.4)  Re[2]: XML結合処理
□投稿者/ トラヤ (2回)-(2007/08/14(Tue) 19:37:25)
ありがとうございました。
おかげさまで解決できました。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -