xsl: совпадение шаблона для xml с префиксами
-
06-07-2019 - |
Вопрос
У меня есть этот 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>
Мне нужно сопоставить данные внутри < Patient AccountNumber > ;, который находится внутри < enterpriseClaim > ;, который находится внутри < bo: C837ClaimParent GT; Я перепробовал все значения, которые я могу придумать для соответствия 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-of?
также для этого же файла я буду сопоставлять другие значения, все находится внутри главного узла < bo: C837ClaimParent, так что мне нужно использовать, чтобы я мог эффективно сопоставлять узлы по всему файлу? р>
Решение
Похоже, вам не хватает объявления пространства имен для вашего префикса 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
находится в другом пространстве имен, чем C837ClaimParent
?
Другие советы
<xsl:stylesheet ... xmlns:bo="http://www.bo.org">
...
<xsl:value-of select="/bo:C837ClaimParent/enterpriseClaim/patientAccountNumber" />
...
</xsl:stylesheet>
В общем, мой совет - прочитать о пространствах имен в XML и XPath.