gpt4 book ai didi

xslt - 如何使用 XSLT 1.0 从此 XML 中提取字段?

转载 作者:行者123 更新时间:2023-12-04 17:00:35 25 4
gpt4 key购买 nike

我是 XSLT 新手,需要使用 XSLT 从美国专利商标局的商标文件中提取一些字段。这是典型文件的非常简化的副本:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Transaction xmlns:ns2="urn:us:gov:doc:uspto:trademark:status" xmlns="http://www.wipo.int/standards/XMLSchema/trademarks">
<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>

我希望能够生产:
App number: 74631225

以下是我的几次失败尝试;尝试#1:
<?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:template match="/">
App number: <xsl:value-of select="/Transaction/TradeMarkTransactionBody/TransactionContentDetails/TransactionData/TradeMarkDetails/TradeMark/ApplicationNumber"/>
</xsl:template>
</xsl:stylesheet>

只生产:
App number: 

尝试#2:
<?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:template match="/Transaction/TradeMarkTransactionBody/TransactionContentDetails/TransactionData/TradeMarkDetails/TradeMark">
App number: <xsl:value-of select="ApplicationNumber"/>
</xsl:template>
</xsl:stylesheet>

产生:
  National Trademark Information



US
74631225
1995-02-07-05:00
2178784
1998-08-04-04:00
US
2008-08-11-04:00

JAVA

任何帮助,将不胜感激。一旦我通过了这扇门并且至少有一个领域的工作,我希望我能进入我项目的真正实质。如果重要的话,我同时使用 MSXSL 和 Treebeard(我认为它使用 Saxon)进行测试。

最佳答案

您的 XSLT 代码缺少 namespace 声明。查看 Xml 文档中的根元素,它说:

xmlns="http://www.wipo.int/standards/XMLSchema/trademarks"

这意味着,您的 Xml 文档中的任何元素都在该命名空间中。

另一方面,在 XSLT 中,您没有指定任何 namespace ,这意味着您的 XSLT 处理器使用“空白 namespace ”查找在 XSLT 中指定的元素名称 - 例如 Transaction您在 XSLT 中提到的元素与 Transaction 不同(来自 http://www.wipo.int/standards/XMLSchema/trademarks 命名空间)在您的 Xml 文档中提到。

XSLT,或者更确切地说 XPath,不知道“默认”(无前缀)命名空间的概念,这就是您必须分配一些任意前缀的原因 - 例如 tm :
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:tm="http://www.wipo.int/standards/XMLSchema/trademarks">
<xsl:output method="text" encoding="utf-8" />
<xsl:template match="/">
App number: <xsl:value-of select="/tm:Transaction/tm:TradeMarkTransactionBody/tm:TransactionContentDetails/tm:TransactionData/tm:TradeMarkDetails/tm:TradeMark/tm:ApplicationNumber"/>
</xsl:template>
</xsl:stylesheet>

这应该让你更接近你正在寻找的东西。我只能在几个小时后尝试这个;如果您需要进一步的帮助,请发表评论,我会回来查看这个问题。

关于xslt - 如何使用 XSLT 1.0 从此 XML 中提取字段?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15422834/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com