가 나는 파일 세트 follwing을했다 :xslt의 동적 xpath?
SourceFile.xml :
<?xml version="1.0" encoding="utf-8" ?>
<Employees>
<Employee id="1">
<firstname relationship="headnote">Atif</firstname>
<lastname relationship="lname">Bashir</lastname>
<age relationship="age">32</age>
</Employee>
</Employees>
ParamerterSettings.xml
<?xml version="1.0" encoding="utf-8"?>
<Settings>
<Employee id="1">
<sourceFile>Lookup1.xml</sourceFile>
<sourceXpathfield>Employees/Employee[@id</sourceXpathfield>
<lookupXpathfield>Employees/Employee[@id='1']</lookupXpathfield>
<elementstoinsert>xyz</elementstoinsert>
</Employee>
</Settings>
Lookup.xml
<?xml version="1.0" encoding="utf-8"?>
<Employees>
<Employee id="1">
<department code="102">HR</department>
</Employee>
</Employees>
transform.xsl
을<?xml version="1.0" encoding="UTF-8" ?>
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema" exclude-result-prefixes="xs" version="2.0">
<xsl:include href="identity.xsl"/>
<xsl:param name="EmployeeId" select="'1,2'" />
<xsl:variable name="FileSettings" select="document('test3.xml')" />
<xsl:variable name="SuppressSetting" select="$FileSettings/Settings/Employee[@id = tokenize($EmployeeId, ',')]" />
<xsl:template match="Employee">
<xsl:copy>
<xsl:apply-templates select="@*"/>
<xsl:apply-templates select="publisher" />
<xsl:apply-templates select="node() except publisher"/>
<xsl:variable name="outerfile" select="document($SuppressSetting/sourceFile)"></xsl:variable>
<xsl:variable name="outerfiledetails" select="$outerfile/$SuppressSetting/lookupXpathfield"></xsl:variable>
<xsl:value-of select="$outerfiledetails"></xsl:value-of>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
출력은 다음과 같아야합니다
<?xml version="1.0" encoding="utf-8" ?>
<Employees>
<Employee id="1">
<firstname relationship="headnote">Atif</firstname>
<lastname relationship="lname">Bashir</lastname>
<age relationship="age">32</age>
HR
</Employee>
</Employees>
내가
<xsl:variable name="outerfiledetails" select="$outerfile/$SuppressSetting/lookupXpathfield"></xsl:variable>
다음
에 Transform.xsl에 아래 라인을 변경 내 출력을 얻고 있지만 내가 원하는 SourceFile.xml
및 Lookup.xml
에 대한 XPath 노출을에 유지하려면그래서 좀 더 일반적인 스크립트를 작성할 수 있습니다. 다른 방법으로 동적 xpath를 수행 할 수 있습니까? 동일한 아이디어를 구현하기위한 아이디어 나 힌트는 매우 높이 평가 될 것입니다.
초기의 거의 괴물 같은 질문을 간소화 했음에도 불구하고이 질문은 여전히 너무 복잡하고 잘 정의되어 있지 않습니다. 그것을 강조하고 그것을 더 단순화 시키십시오 - 당신이 모든 세부 사항을 필요로하지 않는다고 확신합니다. 특히 두 개 이상의 파일로 작업해야만 모든 사람들이 그 질문을 이해하려고 애를 씁니다. 너무 복잡하다. 나는 이런 식으로 XSLT 앱을 디자인하지 않을 것이며, 나를 믿는다. 99 %의 개발자가 XSLT로 할 수 없다고 생각하는 정말 어려운 복잡성의 XSLT 앱이있다. –
안녕하세요 Dimitre, 내가 원하는 건 외부 파일에서 xpath 값을 실행하는 것입니다. 이유는 내가 여러 개의 exeternal 파일을 가지고 나는 데이터를 가져 와서 그 데이터를 다시 메인 소스 파일에 삽입하려고한다. 여러 템플릿을 하드 코딩하여 할 수 있지만 그것을 피하고 다른 조인 또는 xpath 값을 기반으로 여러 파일에서 읽는 한 템플릿을 외부 파일의 설정으로 정의 할 싶습니다. – atif
@ Nick-Jones의 대답은 정확합니다. XSLT/XPath 2.0에서는이 작업을 수행 할 수 없으며 다음 버전에서 제공 될 수도 있습니다. 그러나 나는 동적 인 XPath 평가의 필요성에 대해 매우 의문스러워합니다. 문제를 잘 설명하면 해결책이 될 수 있습니다. 왜 "XML 문서에 포함 된이 표현식을 평가할 수 있습니까?"라는 간단한 형태로 질문을 던지십시오. 순수 XSLT 솔루션이 가능하지는 않지만이 문제에 대해 적어도 아는 3 가지 "하이브리드"솔루션이 있습니다. –