Мне нужно перебрать файл XML. Корневой узел имеет несколько дочерних элементов, и мне нужно либо скопировать дочерний элемент как есть, либо сделать что-то. Поэтому я работаю над XSLT, чтобы сделать это. Вот пример исходного XML:
<?xml version="1.0" encoding="utf-8"?>
<XDSDocumentEntry id="DOC01">
<author authorRole="XDSITEST_DICOM_INSTANCE_PUBLISHER" authorPerson="XDSITEST">Author</author>
<classCode displayName="Communication" codingScheme="Connect-a-thon classCodes">Communication</classCode>
<confidentialityCode displayName="Celebrity" codingScheme="Connect-a-thon confidentialityCodes">
</XDSDocumentEntry>
В этом XML мне нужно выбрать узлы author , classCode и confidentialityCodes но я получаю узлы text () с этим кодом:
<xsl:for-each select="node()"><!--<xsl:copy-of select="."/>-->
<!--<xsl:value-of select="local-name()"/>-->
<xsl:choose>
<xsl:when test="author">
do something
</xsl:when>
<xsl:otherwise>
<xsl:copy-of select="."/>
</xsl:otherwise>
</xsl:choose>
</xsl:for-each>
Мой результат пока таков:
author<author authorRole="XDSITEST_DICOM_INSTANCE_PUBLISHER" authorPerson="XDSITEST"
authorInstitution="Some institution"/>
classCode<classCode displayName="Communication" codingScheme="Connect-a-thon classCodes">Communication</classCode>
confidentialityCode<confidentialityCode displayName="Celebrity" codingScheme="Connect-a-thon confidentialityCodes">
C</confidentialityCode>
Есть подсказка? Thx.
EDIT
Извините, произошла ошибка (я удалил).
На самом деле, почему я использую для каждого , потому что мне нужен документ точно таким, каким он был, за исключением нескольких узлов. В приведенном выше примере окончательный результат должен выглядеть следующим образом:
<?xml version="1.0" encoding="UTF-8"?>
<XDSDocumentEntry>
<author authorRole="XDSITEST_DICOM_INSTANCE_PUBLISHER" authorPerson="XDSITEST"
authorInstitution="Some institution"/>
<author>
<authorInstitution>
<organizationName>Some institution</organizationName>
</authorInstitution>
<authorRole>XDSITEST_DICOM_INSTANCE_PUBLISHER</authorRole>
<authorPerson>
<assigningAuthorityName>XDSITEST</assigningAuthorityName>
</authorPerson>
</author>
<classCode displayName="Communication" codingScheme="Connect-a-thon classCodes">Communication</classCode>
<confidentialityCode displayName="Celebrity" codingScheme="Connect-a-thon confidentialityCodes">
C</confidentialityCode>
</XDSDocumentEntry>
РЕДАКТИРОВАТЬ 2
Я создал этот шаблон в соответствии с предложением @Martin. Но все же, как мне выбрать имя узла «автор» ??
<xsl:template match="node()|@*">
<xsl:copy>
<xsl:choose>
<xsl:when test="local-name()=author">
a
</xsl:when>
<xsl:otherwise>
<xsl:apply-templates select="node()|@*"/>
</xsl:otherwise>
</xsl:choose>
</xsl:copy>
</xsl:template>