1

すべてが同じスキーマに準拠している XML がたくさんあります。バッチ編集したい特定の要素は、XML ファイルごとに 1 回だけ発生し、これらのファイルのそれぞれに同一の xPath があります。

e.g.  /Valid/HeaderInfo/SoftwareID

この特定の要素の値(より正確にはノードのテキスト値と呼ばれると思います)を置き換えて、フォルダーのグループのフォルダー内のすべての XML ファイルに対してその更新を実行できるように、スクリプト/手順を作成したいと考えています。 . たとえば、現在は次のとおりです。

<SoftwareID>12451245</SoftwareID>

なりたい

<SoftwareID>53623745</SoftwareID>

代わりは。

私は現在、プログラミングの世界に足を踏み入れたばかりで、XML データ全般についても学んでいます。また、どのように始めればよいかについての基本的な情報が必要です。これを行う最良の方法は何ですか?私は Altova XMLSpy を持っており、それにスクリプト コンポーネントがあることを知っています。しかし、特定のプログラミング言語 (私は現在 Visual Basic を学習しています) でこれを行う方が適切ですか? または、これらの種類のバッチ更新を実行するために存在する他のソフトウェアはありますか?

私を正しい方向に導く情報は素晴らしいでしょう!

ありがとう!

更新 (06/26/13)

FilingSoftwareId (および更新された要素名) への XPath は、実際には次のとおりです。

  ValidFiling/FilingHeader/FilingSoftwareId  

ValidFiling は XML ドキュメントのルートです。あなたが提供したものを使用し、それに応じて更新しましたが、Altova XMLSpy で XSL 変換のためにこの XSL ファイルを選択すると、結果は元の XML ファイルの複製になります。

2 番目のキャッチオール テンプレートがドキュメントに適用されたときに、FilingSoftwareID の更新が元の値に置き換えられている可能性はありますか?

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
    <xsl:output omit-xml-declaration="yes" indent="yes" method="xml"/>
    <xsl:template match="/ValidFiling/FilingHeader/FilingSoftwareId">
        <FilingSoftwareId>
            <xsl:text>243523452345</xsl:text>
        </FilingSoftwareId>
    </xsl:template>
    <xsl:template match="node()|@*">
        <xsl:copy>
                <xsl:apply-templates select="node()|@*"/>
        </xsl:copy>
    </xsl:template>
</xsl:stylesheet>

再度、感謝します!

4

1 に答える 1

1

ID 変換 XSL を作成し、任意のバッチ テクノロジ (必要に応じて .bat、VB アプリ) を使用して、その XSL をそのフォルダー内のすべての XML に適用します。変更したい特定の要素に一致するものを書き、それ以外のすべてのコンテンツをそのまま出力する一般的なテンプレートを含めます。

テストなしでは、次のようになります。

<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:template match="//Valid/HeaderInfo/SoftwareID">
    <SoftwareID>
        <xsl:text>53623745</xsl:text>
    </SoftwareID>        
</xsl:template>
<xsl:template match="@*|node()">
    <xsl:copy>
        <xsl:apply-templates select="@*|node()"/>
    </xsl:copy>
</xsl:template>
</xsl:stylesheet>

その例を拡張して、新しい値をパラメーターとして変換に渡すこともできるため、編集する必要さえありません。

于 2013-06-18T20:57:37.253 に答える