私はこのXMLソースを使用します:
<?xml version="1.0" encoding="UTF-8"?>
<sets xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="simulation-request.xsd">
<set>
<hP />
<para>
<setP>
<nom1>acc</nom1>
<nom2></nom2>
<typ>T</typ>
<oP>T_EQUALS</oP>
<val1>40</val1>
<bId>21</bId>
</setP>
</para>
<issuers />
</set>
<set>
<hP>
<sethP>
<hTyp>EX</hTyp>
<tFt>L_D</tFt>
<tFv>1</tFv>
<sCF>cd</sCF>
<setP>
<nom1>bount</nom1>
<oP>NLO</oP>
<val1>00</val1>
<bId>22</bId>
</setP>
<setP>
<nom1>bount</nom1>
<oP>NLO</oP>
<val1>00</val1>
<bId>23</bId>
</setP>
<setP>
<nom1>bount</nom1>
<oP>NLO</oP>
<val1>00</val1>
<bId>31</bId>
</setP>
</sethP>
</hP>
<para>
<setP>
<nom1>bount</nom1>
<nom2></nom2>
<typ>LO</typ>
<oP>T_C</oP>
<val1>1</val1>
<bId>24</bId>
</setP>
</para>
<issuers />
</set>
</sets>
このXSLTソースを使用:
<?xml version="1.0" encoding="UTF-8"?>
<xsl:transform xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<xsl:output method="xml" version="1.0" encoding="UTF-8" indent="no" xml:space="preserve"/>
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:apply-templates select="node()|@*"/>
</xsl:copy>
</xsl:template>
<xsl:template match="/"><xsl:text> </xsl:text>
<xsl:for-each select="sets/set/hP | sets/set/para/setP">
<com-set-cond b.name="netInternalMs" name="{.//bId}">
</com-set-cond><xsl:text> </xsl:text>
</xsl:for-each>
</xsl:template>
出力は次のようになります。
<?xml version="1.0" encoding="UTF-8"?>
<com-set-cond b.name="netInternalMs" name=""/>
<com-set-cond b.name="netInternalMs" name="21"/>
<com-set-cond b.name="netInternalMs" name="22"/>
<com-set-cond b.name="netInternalMs" name="24"/>
ただし、期待される出力は次のようになります。
<?xml version="1.0" encoding="UTF-8"?>
<com-set-cond b.name="netInternalMs" name="21"/>
<com-set-cond b.name="netInternalMs" name="22"/>
<com-set-cond b.name="netInternalMs" name="23"/>
<com-set-cond b.name="netInternalMs" name="31"/>
<com-set-cond b.name="netInternalMs" name="24"/>
ここで、21、22、23、31、および24の各数値は、xmlファイル全体の要素bIdの値であり、最初のタグのような祖先にbId要素がない場合です。、変換を使用した後、変換は何も表示せず、出力ファイルの最初の行として「name」の値が空の行も表示されません。これを行う方法を知っている人はいますか?ご協力いただきありがとうございます。