gpt4 book ai didi

xml - 更正用于访问从 REST API 调用检索到的 xml 节点的 xslt/xpath 语法

转载 作者:行者123 更新时间:2023-12-03 16:53:21 25 4
gpt4 key购买 nike

第一次发帖,请见谅。我目前正在尝试转换从国家医学图书馆 DailyMed 网站检索到的 Avycaz 结构化产品标签的 xml 文件。我想将通过来自 RxNav API(位于:RxNav API)的 REST 响应获得的数据插入到我生成的转换中。

我的设置:

Avycaz.xml(太大,无法包括在下面)+ my.xslt + REST_response.xml = output.xml

REST_response.xml:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<rxnormdata>
<idGroup>
<idType>NDC</idType>
<id>0456-2700-10</id>
<rxnormId>1603845</rxnormId>
</idGroup>
</rxnormdata>

my.xslt 中的 REST_response.xml API 调用:

https://rxnav.nlm.nih.gov/REST/Prescribe/rxcui?idtype=NDC&id=0456-2700-10

我的.xslt:

<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet exclude-result-prefixes="rxnav" version="2.0"
xmlns:fn="http://www.w3.org/2004/07/xpath-functions"
xmlns:rxnav="https://rxnav.nlm.nih.gov/REST/"
xmlns:xdt="http://www.w3.org/2001/XMLSchema"
xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xpath-default-namespace="urn:hl7-org:v3"
xsi:schemaLocation="urn:hl7-org:v3 http://www.accessdata.fda.gov/spl/schema/spl.xsd">
<xsl:output encoding="UTF-8" indent="yes" method="xml" omit-xml-declaration="yes"/>

<xsl:variable name="NDC" select="'0456-2700-10'"/>
<!--This data would actually be imported from Avycaz.xml
Hence all of the xmlns attributes above-->

<xsl:variable name="REST_response"
select="document(concat('https://rxnav.nlm.nih.gov/REST/Prescribe/rxcui?idtype=NDC&amp;id=',
$NDC))"/>
</xsl:variable>

<xsl:template match="/">
<xsl:element exclude-result-prefixes="#all" name="api-tests">
<para>
<xsl:text>NDC: </xsl:text>
<xsl:value-of select="$NDC"/>
</para>
<para>
<xsl:text>RxCUI_1:
</xsl:text>
<xsl:value-of select="$REST_response"/>
<xsl:text>
Result: Fail</xsl:text>
</para>
<para>
<xsl:text>RxCUI_2:
</xsl:text>
<xsl:value-of select="$REST_response/rxnormdata/idGroup/rxnormId"/>
<xsl:text>
Result: Fail</xsl:text>
</para>
<para>
<xsl:text>RxCUI_3:
</xsl:text>
<xsl:value-of select="$REST_response//rxnormId"/>
<xsl:text>
Result: Fail</xsl:text>
</para>
<para>
<xsl:text>RxCUI_4:
</xsl:text>
<xsl:value-of select="$REST_response//rxnav:rxnormId"/>
<xsl:text>
Result: Fail</xsl:text>
</para>
<para>
<xsl:text>RxCUI_5:
</xsl:text>
<xsl:value-of select="$REST_response//*[local-name()[contains(., 'rxnormId')]]/text()"/>
<xsl:text>
Result: Success</xsl:text>
</para>
</xsl:element>
</xsl:template>
</xsl:stylesheet>

输出.xml:

<api-tests>
<para>NDC: 0456-2700-10</para>
<para>RxCUI_1:
NDC0456-2700-101603845
Result: Fail</para>
<para>RxCUI_2:

Result: Fail</para>
<para>RxCUI_3:

Result: Fail</para>
<para>RxCUI_4:

Result: Fail</para>
<para>RxCUI_5:
1603845
Result: Success</para>
</api-tests>

我想将 <rxnormId> 1603845 <rxnormId> 元素中的数据插入到我生成的转换中。我尝试过的唯一可行的方法是使用 XPATH 语句:$REST_response//*[local-name()[contains(., 'rxnormId')]]/text()

有没有更好的方法,真正访问节点,不涉及字符串匹配?

任何帮助将不胜感激。提前致谢!

最佳答案

这是因为您正在使用 xpath-default-namespace="urn:hl7-org:v3"。 REST 响应不在命名空间中,因此您的 xpath 不匹配。

你可以做的是通过使用 * 作为前缀来匹配任何命名空间中的 rxnormId:

<xsl:value-of select="$REST_response//*:rxnormId"/>

如果你想确保只匹配没有命名空间的rxnormId,你可以测试命名空间uri:

<xsl:value-of select="$REST_response//*:rxnormId[namespace-uri()='']"/>

关于xml - 更正用于访问从 REST API 调用检索到的 xml 节点的 xslt/xpath 语法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34399847/

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