xsl:带前缀的xml的模板匹配

xsl:带前缀的xml的模板匹配,xml,xslt,xpath,xls,transformation,Xml,Xslt,Xpath,Xls,Transformation,我有这个xml文件 <?xml version="1.0" encoding="UTF-8"?> <bo:C837ClaimParent xsi:type="bo:C837ClaimParent" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:bo="http://somelongpathHere/process/bo"> <claimAux> ... </clai

我有这个xml文件

<?xml version="1.0" encoding="UTF-8"?>
<bo:C837ClaimParent xsi:type="bo:C837ClaimParent"     
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"   
xmlns:bo="http://somelongpathHere/process/bo">
<claimAux>
...
</claimAux>
<enterpriseClaim>
...
    <patientAccountNumber>data to capture here</patientAccountNumber>
</enterpriseClaim>

...
...
此处要捕获的数据
我需要匹配里面的数据,哪个在里面,哪个在里面 我已经尝试了在xsl:template匹配中可以想到的所有值,但我无法匹配该节点,它要么找不到该节点,要么匹配整个xml文件,我的xsl文件如下所示:

    <?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" version="2.0" encoding="UTF-8" indent="yes"/>
    <xsl:template match="/">
    <html>
....
<div>
  <xsl:value-of select="C837ClaimParent/enterpriseClaim/patientAccountNumber" /></div>

....
我需要在xsl:template和xsl:value上指定什么


另外,对于同一个文件,我将匹配其他值,所有内容都在主节点内您似乎缺少
bo
前缀的名称空间声明。除非使用
local-name()

编辑(出现名称空间后

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:bo="http://somelongpathHere/process/bo">
    <xsl:output method="xml" version="2.0" encoding="UTF-8" indent="yes"/>
    <xsl:template match="/">
    <html>
....
<div>
  <xsl:value-of select="bo:C837ClaimParent/enterpriseClaim/patientAccountNumber" /></div>

....

您确定
enterpriseClaim
c837claimprent
位于不同的命名空间中吗?

您的
bo
前缀似乎缺少命名空间声明。除非您使用
local-name()

<xsl:stylesheet ... xmlns:bo="http://www.bo.org">
   ...
   <xsl:value-of select="/bo:C837ClaimParent/enterpriseClaim/patientAccountNumber" />
   ...
</xsl:stylesheet>
编辑(出现名称空间后

<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
  xmlns:bo="http://somelongpathHere/process/bo">
    <xsl:output method="xml" version="2.0" encoding="UTF-8" indent="yes"/>
    <xsl:template match="/">
    <html>
....
<div>
  <xsl:value-of select="bo:C837ClaimParent/enterpriseClaim/patientAccountNumber" /></div>

....
您确定
enterpriseClaim
c837claimprent
位于不同的命名空间中吗?


<xsl:stylesheet ... xmlns:bo="http://www.bo.org">
   ...
   <xsl:value-of select="/bo:C837ClaimParent/enterpriseClaim/patientAccountNumber" />
   ...
</xsl:stylesheet>
... ...
一般来说,我的建议是阅读XML和XPath中的名称空间。


...
...

一般来说,我的建议是阅读XML和XPath中的名称空间。

我已经尝试过了,我得到了这个错误:“引用未声明的名称空间前缀:'bo'”请注意
xmlns:bo
关于
!@Pavel注意他为bo添加了一个不同于您的名称空间我已经尝试过了,我得到了这个错误:对未声明的命名空间前缀的引用:“bo”"请注意
xmlns:bo
关于
的声明!@Pavel注意,他为bo添加了一个不同的名称空间,我修复了格式问题,在编辑器中遇到了很多问题。当时,添加了名称空间,现在我如何避免在每次选择时都指定前缀,这样有效吗?你呢无法避免前缀。在XML中,可以使用默认名称空间(没有前缀),但在XPath中,没有前缀总是意味着空名称空间(即没有URI)。这不会以任何方式影响效率。很抱歉,我修复了格式问题,在编辑器上正确设置了许多问题。当时,添加了命名空间,现在如何避免在每次选择时都指定前缀,是否有效?无法避免前缀。在XML中,可以使用默认命名空间(没有前缀),但在XPath中,没有前缀总是意味着空名称空间(即没有URI)。这不会以任何方式影响效率。