【问题标题】:parse xml from api with xslt 2.0使用 xslt 2.0 从 api 解析 xml
【发布时间】:2015-08-13 22:54:54
【问题描述】:

我想使用 xslt 2.0 将一些从 api 请求中检索到的元素输入到一个 xml 文件中。

例如我有这个查询:https://api.zotero.org/users/2138134/items?tag=quaderni&format=tei

返回

<listBibl xmlns="http://www.tei-c.org/ns/1.0">
<biblStruct type="journalArticle" xml:id="zoteroItem_1">
<analytic>
<title level="a"/>
</analytic>
<monogr>
<title level="j">Quaderni di Archeologia della Libia</title>
<edition>31</edition>
<imprint>
<biblScope type="vol">vol. I</biblScope>
<date>1950</date>
</imprint>
</monogr>
</biblStruct>
</listBibl>

然后,我想将其中的一些内容添加到我的文件中。 假设我有

<bibliography><ptr target="quaderni"></bibliography>

我想拥有

<bibliography>
    <listBibl xmlns="http://www.tei-c.org/ns/1.0">
    <biblStruct type="journalArticle" xml:id="zoteroItem_1">
    <analytic>
    <title level="a"/>
    </analytic>
    <monogr>
    <title level="j">Quaderni di Archeologia della Libia</title>
    <edition>31</edition>
    <imprint>
    <biblScope type="vol">vol. I</biblScope>
    <date>1950</date>
    </imprint>
    </monogr>
    </biblStruct>
    </listBibl>
</bibliography>

我已经根据@target 的内容将 api 查询放入一个变量中,我想我可以简单地使用 fn:document 来解析 xml,但它似乎不起作用,我担心这是不可能的。提前感谢您的帮助。

【问题讨论】:

    标签: xml api xslt


    【解决方案1】:

    这是一个按照您所说的尝试的示例:

    <xsl:stylesheet
      xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
      version="2.0">
    
    <xsl:param name="url1" select="'https://api.zotero.org/users/2138134/items?tag=quaderni&amp;format=tei'"/>
    
    <xsl:output indent="yes"/>
    
    <xsl:template match="@* | node()">
      <xsl:copy>
        <xsl:apply-templates select="@* , node()"/>
      </xsl:copy>
    </xsl:template>
    
    <xsl:template match="ptr[@target = 'quaderni']">
      <xsl:copy-of select="doc($url1)"/>
    </xsl:template>
    
    </xsl:stylesheet>
    

    对我来说输出是

    <bibliography>
       <listBibl xmlns="http://www.tei-c.org/ns/1.0">
          <biblStruct type="journalArticle" xml:id="zoteroItem_1">
             <analytic>
                <title level="a"/>
             </analytic>
             <monogr>
                <title level="j">Quaderni di Archeologia della Libia</title>
                <edition>31</edition>
                <imprint>
                   <biblScope type="vol">vol. I</biblScope>
                   <date>1950</date>
                </imprint>
             </monogr>
          </biblStruct>
       </listBibl>
    </bibliography>
    

    【讨论】:

    • 谢谢!我仍然无法让它像你一样好用。我使用了变量而不是参数:这有什么不同吗?我本以为不会……我的另一个猜测是我的问题出在其他地方。我现在收到此错误:FODC0002:XML 解析器处理报告的 I/O 错误api.zotero.org/users/2138134/items?tag=quaderni&format=tei:建立安全 HTTPS 连接时出现问题。
    • 该 URL 是一个 HTTPS URL,听起来您使用 XSLT 2.0 的环境在建立安全 HTTPS 连接时遇到了问题。我不知道您使用哪种 XSLT 2.0 处理器以及如何使用它,Saxon 9 从命令行作为-t 选项了解详细信息。
    • 也非常感谢,我正在使用 Saxon-PE 9.6.0.5 和 Oxygen XML Editor。
    • 我从命令行使用 Saxon-HE 9.6.0.7J 运行我发布的示例没有问题,所以我不知道为什么 Oxygen 会出错。尝试从命令行运行 Saxon,如果这有效并且 Oxygen 中的相同 XSLT 不起作用,请使用 Oxygen XML IDE 标签标记您的问题,或者在他们网站上的支持论坛中询问您是否需要对 HTTPS 进行一些配置。
    • 现在可以工作了,我重新安装了氧气和java,问题就解决了。非常感谢您的回答!
    猜你喜欢
    • 2019-07-17
    • 1970-01-01
    • 2016-08-19
    • 2013-01-17
    • 2012-10-14
    • 1970-01-01
    • 1970-01-01
    • 2014-08-05
    • 1970-01-01
    相关资源
    最近更新 更多