XSLT はまだかなり新しいものです。XSLT (1.0) を使用して、XML ファイルから特定のフィールドだけを抽出しようとしています。以下は、実際の XML ドキュメントの単純化された形式です。
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Transaction>
<TradeMarkTransactionBody>
<TransactionContentDetails>
<TransactionCode>National Trademark Information</TransactionCode>
<TransactionData>
<TradeMarkDetails>
<TradeMark>
<RegistrationOfficeCode>US</RegistrationOfficeCode>
<ApplicationNumber>74631225</ApplicationNumber>
<ApplicationDate>1995-02-07-05:00</ApplicationDate>
<RegistrationNumber>2178784</RegistrationNumber>
<RegistrationDate>1998-08-04-04:00</RegistrationDate>
<FilingPlace>US</FilingPlace>
<MarkCurrentStatusDate>2008-08-11-04:00</MarkCurrentStatusDate>
<WordMarkSpecification>
<MarkVerbalElementText>JAVA </MarkVerbalElementText>
</WordMarkSpecification>
</TradeMark>
</TradeMarkDetails>
</TransactionData>
</TransactionContentDetails>
</TradeMarkTransactionBody>
</Transaction>
これが私の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="text" encoding="utf-8" />
<xsl:strip-space elements="*"/>
<xsl:template match="Transaction">
<xsl:apply-templates/>
</xsl:template>
<xsl:template match="TradeMark">
MarkCurrentStatusDate,"<xsl:value-of select="MarkCurrentStatusDate"/>"
ApplicationNumber,"<xsl:value-of select="ApplicationNumber"/>"
ApplicationDate,"<xsl:value-of select="ApplicationDate"/>"
RegistrationNumber,"<xsl:value-of select="RegistrationNumber"/>"
RegistrationDate,"<xsl:value-of select="RegistrationDate"/>"
ExpirationDate,"<xsl:value-of select="ExpirationDate"/>"
<xsl:apply-templates select="WordMarkSpecification"/>
</xsl:template>
<xsl:template match="WordMarkSpecification">
MarkVerbalElementText,"<xsl:value-of select="normalize-space(MarkVerbalElementText)"/>"
</xsl:template>
</xsl:stylesheet>
これはほぼ機能し、次のようになります。
National Trademark Information
MarkCurrentStatusDate,"2008-08-11-04:00"
ApplicationNumber,"74631225"
ApplicationDate,"1995-02-07-05:00"
RegistrationNumber,"2178784"
RegistrationDate,"1998-08-04-04:00"
ExpirationDate,""
MarkVerbalElementText,"JAVA"
TransactionCode
私の質問: 1) (" National Trademark Information
" 出力で) のような不要なデータを取得しないようにするにはどうすればよいですか? ExpirationDate
2)との間の空白行を避けるにはどうすればよいMarkVerbalElementText
ですか? (XSLT ファイルの空白行ではないことを確認しました。空白行を省略しても効果はありません。)
(これら 2 つの質問には 1 つの答えがあるのではないかと思います。選択されていないMarkVerbalElementText
テキストと、選択されていない改行を何らかの形で保持していると思われます。)