나는 아래 XML 파일 2 개를 가지고있다.예외를 던지는 패턴 일치
Title.XML
<?xml version="1.0" encoding="UTF-8"?>
<entry>
<file name="LCCPMY_CH_01.xml"></file>
</entry>
Contents.xml
<toc-pg>1</toc-pg>
및 LCCPMY_CH_01.xml의 내용은 아래와 같다. 여기에 내가 어떻게하고 content.xml 파일, Title.xml 파일의 도움을 사용하는 것입니다 노력하고있어
<chapter num="A">
<section level="sect1">
<page num="1"/>
<title>
<content-style font-style="bold">Chapter 1: This is Chapter</content-style>
</title>
</section>
</chapter>
, 내가 수 (page num of LCCPMY_CH_01.xml is equal to Contents.xml toc-pg value
)와 일치하는 것을 시도하고있다. 나는 그것을하기 위해 아래의 XSLT를 사용하고있다.
<xsl:template match="toc-pg" mode="x">
<xsl:variable name="dot" select="."/>
<xsl:analyze-string select="." regex="([0-9]+)">
<xsl:matching-substring>
<xsl:variable name="prent">
<xsl:for-each select="document('C:\Users\u0138039\Desktop\Proview\MY\2014\The Law of Costs in Civil Proceedings\title.xml')/entry/file">
<xsl:value-of select="normalize-space(document(concat('C:\Users\u0138039\Desktop\Proview\MY\2014\The Law of Costs in Civil Proceedings\',./@name))/chapter/section[@level='sect1']/substring-after(fn:substring-before(.,':'),' ')[//page/@num=regex-group(1)]|a[//page/@num=regex-group(1)])"/>
</xsl:for-each>
</xsl:variable>
<xsl:variable name="cha">
<xsl:value-of select="$prent"/>
</xsl:variable>
<xsl:variable name="size">
<xsl:value-of select="string-length($cha)"/>
</xsl:variable>
<xsl:variable name="conct">
<xsl:choose>
<xsl:when test="$size>'1'">
<xsl:value-of select="concat('er:#LCCPMY_CH_',$cha,'/pg_',.)"/>
</xsl:when>
<xsl:otherwise>
<xsl:value-of select="concat('er:#LCCPMY_CH_0',$cha,'/pg_',.)"/>
</xsl:otherwise>
</xsl:choose>
</xsl:variable>
<a href="{$conct}">
<xsl:value-of select="regex-group(1)"/>
</a>
</xsl:matching-substring>
<xsl:non-matching-substring>
<xsl:value-of select="."/>
</xsl:non-matching-substring>
</xsl:analyze-string>
</xsl:template>
하지만이 코드를 실행하면 예외가 발생합니다.
XSLT 2.0 Debugging Error: Error: file:///C:/Users/u0138039/Desktop/Proview/MY/2014/The%20Law%20of%20Costs%20in%20Civil%20Proceedings/09172014/XSLT/MCCL_TOC_01.xsl:235: Not a node item - item has type xs:string with value '1' - Details: - XPTY0020: The context item in an axis step must be a node
제가 잘못 가고 있으며 어떻게 해결할 수 있는지 알려주세요. 나는 XSLT 2.0을 사용한다.
감사 의견에서 언급 한 바와 같이
는이' '1' ">> 라인 235? 그렇다면,이 변경해야합니다'' –
안녕하세요 @ JoelM.Lamsen, 답장을 주셔서 감사합니다, 표시된 오류는' –
user3872094
문제는 문맥 항목이 문자열이고, 문자열이 어떤 문서에도 속하지 않으므로 'page'요소에 접근하기 위해'// page '를 사용하는 술어'[// page/@ num =.]' 문서에서 원하는 문서가 명확하지 않으므로 작동하지 않습니다. 검색 할 문서를 설명하거나 예를 들어 해당 문서의 루트 노드를 저장하는 외부 변수를 정의하십시오. ' '그리고 나서'[$ doc // page/@ num =.]'에 접근한다. –