Предыстория У меня есть проверка схемы и перевод xslt в pdf.
Проблема Я хочу проверить, присутствует ли содержимое тега xml в списке допустимых кодов во внешнем файле. интересны только значения атрибутов во внешнем файле. Значения узла используются для других целей в другой таблице стилей.
<xsl:template match="//medicalFieldcode" priority="1000" mode="M4">
<svrl:fired-rule xmlns:svrl="http://purl.oclc.org/dsdl/svrl" context="//medicalFieldcode"/>
<xsl:variable name="MVOcodes" select="document('verksamhetskodlista.xml')"/>
<!--ASSERT -->
<xsl:choose>
<xsl:when test="boolean($MVOcodes/module/document-merge/g-funcs/g[contains(@name,.)])"/>
<xsl:otherwise>
<svrl:failed-assert xmlns:svrl="http://purl.oclc.org/dsdl/svrl"
test="boolean($MVOcodes/module/document-merge/g-funcs/g[contains(@name,.)])">
<xsl:attribute name="id">R43</xsl:attribute>
<xsl:attribute name="location">
<xsl:apply-templates select="." mode="schematron-select-full-path"/>
</xsl:attribute>
<svrl:text>MedicalFieldCode must be in the valid list of codes.</svrl:text>
</svrl:failed-assert>
</xsl:otherwise>
</xsl:choose>
<xsl:apply-templates select="*|comment()|processing-instruction()" mode="M4"/>
</xsl:template>
Внешний файл (verksamhetskodlista.xml) имеет следующую структуру:
<module xmlns:mmx="http://funx" xmlns:html="http://www.w3.org/1999/xhtml" xmlns:svg="http://www.w3.org/2000/svg" xmlns:fnc="http://funx/fnc" xmlns:att="http://funx/att" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
<document-merge>
<g-funcs>
<g name="003">value1</g>
<g name="009">another value</g>
<g name="011">yet another value</g>
<!-- ... -->
</g-funcs>
</document-merge>
Extract from the sample xml:
<ProcessClaimSpecification xmlns="urn:riv:financial:billing:claim:ProcessClaimSpecificationResponder:1">
<s01:claimSpecification xmlns="urn:riv:financial:billing:claim:1" xmlns:s01="urn:riv:financial:billing:claim:ProcessClaimSpecificationResponder:1">
<healthCareServicesSpecificationLine>
<healthcarePerformed>
<!-- a bunch of content -->
<activity>
<medicalFieldCode>000</medicalFieldCode>
</activity>
</healthcarePerformed>
</healthCareServicesSpecificationLine>
</s01:claimSpecification>
I need to validate this using xpath. I've tried applying this contains instruction w/o much luck, and I've been searching but to no avail.
Проблема в том, что он всегда отображается как истина, даже при использовании 000, которого нет в списке кодов. Я пробовал много различных реструктурированных вариантов содержимого xpath, но он не работает удовлетворительно. Я не уверен, что пришел с правильного угла здесь. Я использую xslt 2.0, поэтому переменная должна содержать набор узлов.
Среди прочего, я пробовал эти выражения xpath
boolean($MVOcodes/module/document-merge/g-funcs/g[contains(@name,.)])
contains($MVOcodes/module/document-merge/g-funcs/g/@name, .)
Я был в этом в течение нескольких дней, но ничего не добился, поэтому, пожалуйста, помогите? Внешний файл используется и в другом xsl-документе, поэтому он имеет такую структуру. Я подумал, что если я буду использовать его повторно, его будет меньше поддерживать.
g[contains(@name,.)]
вы хотите сравнитьg[contains(@name, current()]
. Точка.
в вашей попытке относится к элементуg
, на который вы поместили предикат. - person Martin Honnen   schedule 27.11.2018xpath-default-namespace
?). - person Martin Honnen   schedule 28.11.2018