비슷한 질문을 여러 번 보았습니다. 그러나이 질문이 제 사례에 적용되는지 또는 단순히 프로세스를 이해하지 못했는지는 확실하지 않습니다.XML 태그를 XSLT로 텍스트 노드로 바꿉니다.
나는 규칙의 목록을 포함하는 XML 파일이 :
<rules>
<rule id="1">
<block>
[HTML content]
</block>
<block>
[HTML content]
</block>
<block>
[HTML content]
</block>
</rule>
<rule id="2">
<block>
[HTML content]
</block>
<block>
[HTML content]
</block>
</rule>
[...]
</rules>
지금 내 코드는 다음과 같은 :
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xhtml="http://www.w3.org/1999/xhtml">
<xsl:template match="/rules/rule">
[some output to create the header and title]
<xsl:for-each select="block">
<xsl:copy-of select="./node()" />
</xsl:for-each>
[some output to create the footer]
</xsl:template>
</xsl:stylesheet>
명확하게하기 위해,이 문서 전체가 아니라 사용자가 규칙을 클릭하여 콘텐츠 및 코드를 볼 때 AJAX를 통해 호출되는 부분보다 훨씬 간단합니다. 다양한 block
요소를 표시하는 방법에 대해 내부에서 결정해야하는 몇 가지 결정 사항이 있지만 지금은 이 부분들은 m에 불필요하다. y 문제가 있으며 코드 읽기가 더 어려워집니다.
이 특별한 경우에는 HTML 콘텐츠를 직접 저장하므로 XSLT가 적절하지 않은 것처럼 보일 수 있습니다. 그러나 이것은 데이터가 훨씬 더 설계된 더 큰 프로젝트의 일부입니다. 이것이 내가 리조트에 가져다 준 유일한 부분입니다. 이 해결책에.
그러나 rule
태그 안에는 규칙의 ID와 1-1, 1-2 등의 두 번째 숫자가있는 테이블이 있습니다. 문제는 약 20 개의 규칙과 계획이 있습니다. 비선형 방식으로 목록을 확장합니다. 지금은 규칙 1과 규칙 2 사이에 규칙을 추가하고 싶습니다. 따라서 다음 테이블 ID를 모두 수정해야합니다. 과거에는 이미 이런 일이 벌써 일어 났으므로 앞으로는 이런 일이 발생하지 않을 것이므로이 쓸데없는 추가 작업을 피하고 Table <id />-12: [...]
과 같이 <id />
태그로 교체하고 <id />
을 규칙의 ID로 바꿉니다. . 나는 이런 식으로 코드를 수정하려고 :
<?xml version="1.0" encoding="UTF-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" xmlns:xhtml="http://www.w3.org/1999/xhtml">
<xsl:template match="/rules/rule">
[some output to create the header and title]
<xsl:for-each select="block">
<xsl:copy>
<xsl:apply-templates select="node()|@*" />
</xsl:copy>
</xsl:for-each>
[some output to create the footer]
</xsl:template>
<xsl:template match="id"><xsl:value-of select="ancestor::rule/@id" /></xsl:template>
</xsl:stylesheet>
치환 작업, 유일한 문제는 이전 코드가 그랬던 것처럼 다른 모든 태그가 사라 동안 <block>
태그, 제거되지 않습니다 것입니다. HMTL 태그가없는 단일 텍스트 블록 만 있습니다.
<xsl:copy>
및
<xsl:apply-templates>
태그가 발생한 것은 이번이 처음이다, 그래서 나는 그들이 어떻게 작동하는지 정말 모르겠어요. 더욱이, 내가 발견 한 모든 예제는 이전에 링크 된 예제와 비슷합니다. 여기서 거의 정확한 복사본이 필요합니다. 또한 주 출력 주위에 많은 추가 코드를 추가해야하며이 대체 코드와 어떻게 상호 작용하는지 잘 모르겠습니다.
편집 : 나는 또한 for-each
사이클 내부의 변형
<xsl:apply-templates select="node()|@*">
<xsl:copy-of select="./node()" />
</xsl:apply-templates>
을 시도,하지만 난 같은 결과를 얻을 : 텍스트를 태그하지 않고 있지만, 대체 작동합니다. apply-templates
태그가 모든 태그를 제거하는 것처럼 보이지만 태그를 보존하는 방법을 모르겠습니다. 당신이 발견 한 용액에 for-each
루프에서
감사합니다. 이제 작동합니다. ID 템플릿이 무엇인지 모르고 링크 된 질문의 코드에서 제거했습니다. – GRB