XSLTを使用してxmlファイルをxmlに変換する際に問題が発生しました。最初のノードの属性を取得しているように見えますが、名前の付いたノード<attribute>
とその属性と値を取得できません。場合によっては、ノードに必要な属性と値を持つ<attribute>
名前のノードがあります。<codedvalue>
ファイルの例を次に示します(編集:読みやすくするために空白を追加):
<?xml version='1.0' encoding='UTF-8'?>
<arb:result xmlns:arb="urn::codeservice">
<arb:document
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="urn::codeservice prod_code.xsd">
<header>Produced by CodeRows 4.2</header>
<body>
<termsystem id="1" begindate="1970-01-01T00:00:01"
expirationdate="2099-12-31T23:59:59"
lastmodifieddate="2012-10-05T09:52:02.35522"
lastmodifiedby="Admin">
<attribute type="longname" datatype="ST"
language="fi">1</attribute>
<attribute type="status" datatype="ST">1</attribute>
<attribute type="codetype" datatype="ST">1</attribute>
<attribute type="relatesto" datatype="ST">BASE</attribute>
<attribute type="relatestoname" datatype="ST">BASE</attribute>
<attribute type="hierarchical" datatype="ST">0</attribute>
<termitementry id="1010110" language="fi"
createdate="2007-10-25T15:24:17.0"
begindate="2003-01-01T00:00:01.0"
expirationdate="2004-12-31T23:59:59.0"
lastmodifieddate="2007-10-25T17:06:25.0"
lastmodifiedby="Admin">
<attribute type="status" datatype="ST">1</attribute>
<attribute type="shortname" datatype="ST" language="fi">Whey protein</attribute>
<attribute type="longname" datatype="ST" language="fi" />
<attribute type="abbreviation" datatype="ST"
language="fi">Raspberry</attribute>
<attribute type="hierarchylevel" datatype="ST">0</attribute>
<attribute type="parentid" datatype="ST" language="fi" />
<attribute type="description" datatype="ST" language="fi" />
<attribute type="owner" datatype="ST"
language="sv">Admin</attribute>
<attribute type="externallink"
datatype="CV"
begindate="2003-01-01T00:00:01.0"
expirationdate="2005-12-31T23:59:59.0"
><codedvalue code="08"
codesystem="PUN"
codesystemversion="1"
referenceid="BASEpowder" /></attribute>
<attribute type="externallink"
datatype="CV"
begindate="2001-01-01T00:00:01.0"
expirationdate="2006-12-31T23:59:59.0"
><codedvalue code="80112"
codesystem="PROTEIN"
codesystemversion="1"
referenceid="BASEprotein" /></attribute>
<attribute type="externallink"
datatype="CV"
begindate="2003-01-01T00:00:01.0"
expirationdate="2008-01-31T23:59:59.0"
><codedvalue code="03"
codesystem="REF"
codesystemversion="1"
referenceid="BASEref" /></attribute>
</termitementry
></termsystem
></body
></arb:document
></arb:result>
私が使用している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" indent="yes"/>
<xsl:template match="termitementry">
<xsl:element name="CodeRow">
<xsl:element name="Code">
<xsl:apply-templates select="@id" />
</xsl:element>
<xsl:element name="Begindate">
<xsl:apply-templates select="@begindate" />
</xsl:element>
<xsl:element name="Expirationdate">
<xsl:apply-templates select="@expirationdate" />
</xsl:element>
<xsl:element name="Lastmodifiedby">
<xsl:apply-templates select="@lastmodifiedby" />
</xsl:element>
</xsl:element>
</xsl:template>
<xsl:template match="@id">
<xsl:value-of select="." />
</xsl:template>
<xsl:template match="@begindate">
<xsl:value-of select="." />
</xsl:template>
<xsl:template match="@expirationdate">
<xsl:value-of select="." />
</xsl:template>
<xsl:template match="@lastmodifiedby">
<xsl:value-of select="." />
</xsl:template>
</xsl:stylesheet>
これにより、最初のノードの属性のみを取得しているように見えます<termitementry>
が、それ以降は何も取得していません。+それ以降は、http://chris.photobooks.com/xml/default.htmを使用してテストしています。
<transformiix:result>
Produced by CodeRows 4.2
1
1
1
BASE
BASE
0
<CodeRow>
<Code>
1010110
</Code>
<Begindate>
2003-01-01T00:00:01.0
</Begindate>
<Expirationdate>
2004-12-31T23:59:59.0
</Expirationdate>
<Lastmodifiedby>
Admin
</Lastmodifiedby>
</CodeRow>
</transformiix:result>
誰かが残りを取り除く方法を助けることができますか?
基本構造が次のxmlを取得したい:
<coderow>
<Code>
1010110
</Code>
<Begindate>
2003-01-01 (only want the 10 first digits of 2003-01-01T00:00:01.0, preferably I would just to have the digits so it looks like 20030101)
</Begindate>
<Shortname>
Whey protein
</Shortname>
<BASEpowder>
08
<BASEpowder>
<BASEprotein>
80112
</BASEprotein>
</CodeRow>
そして、どうして「CodeRows 4.2などで作成された」というテンプレートを作成したことがわからないのですか?