반응형
기본 네임 스페이스가 xmlns로 설정된 XML 소스가있는 XSLT
루트에 표시된 기본 네임 스페이스가있는 XML 문서가 있습니다. 이 같은:
<MyRoot xmlns="http://www.mysite.com">
<MyChild1>
<MyData>1234</MyData>
</MyChild1>
</MyRoot>
XML을 구문 분석하는 XSLT가 기본 네임 스페이스로 인해 예상대로 작동하지 않습니다. 즉, 네임 스페이스를 제거하면 모든 것이 예상대로 작동합니다.
내 XSLT는 다음과 같습니다.
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xsl:template match="/" >
<soap:Envelope xsl:version="1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<NewRoot xmlns="http://wherever.com">
<NewChild>
<ChildID>ABCD</ChildID>
<ChildData>
<xsl:value-of select="/MyRoot/MyChild1/MyData"/>
</ChildData>
</NewChild>
</NewRoot>
</soap:Body>
</soap:Envelope>
</xsl:template>
</xsl:stylesheet>
번역이 제대로 작동하려면 XSLT 문서로 무엇을해야합니까? XSLT 문서에서 정확히 무엇을해야합니까?
XSLT에서 네임 스페이스를 선언하고 XPath 표현식에서 사용해야합니다. 예 :
<xsl:stylesheet ... xmlns:my="http://www.mysite.com">
<xsl:template match="/my:MyRoot"> ... </xsl:template>
</xsl:stylesheet>
당신이 참고 해야한다 당신의 XPath에 해당 네임 스페이스의 요소를 참조하려면 몇 가지 접두사를 제공한다. xmlns="..."
접두사 없이도 할 수 있고 리터럴 결과 요소에 대해서는 작동하지만 XPath에서는 작동하지 않습니다. XPath에서 접두사가없는 이름은 xmlns="..."
범위에 관계없이 항상 빈 URI가있는 네임 스페이스에있는 것으로 간주됩니다 .
XSLT 2.0을 사용 xpath-default-namespace="http://www.example.com"
하는 경우 stylesheet
섹션 에서 지정 하십시오.
이것이 일종의 이름 공간 문제라면 xslt 파일에서 두 가지를 수정할 여지가 있습니다.
- xsl : stylesheet 태그에 "my"네임 스페이스 정의 추가
- xml 파일을 탐색 할 때 요소를 호출 할 때 "my :"접두사를 사용합니다.
결과
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:my="http://www.w3.org/2001/XMLSchema">
<xsl:template match="/" >
<soap:Envelope xsl:version="1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<NewRoot xmlns="http://wherever.com">
<NewChild>
<ChildID>ABCD</ChildID>
<ChildData>
<xsl:value-of select="/my:MyRoot/my:MyChild1/my:MyData"/>
</ChildData>
</NewChild>
</NewRoot>
</soap:Body>
</soap:Envelope>
</xsl:template>
</xsl:stylesheet>
반응형
'Programing' 카테고리의 다른 글
Java의 비동기 IO? (0) | 2020.12.25 |
---|---|
Visual Studio 2010을 VS2008과 나란히 설치하면 문제가 발생합니까? (0) | 2020.12.25 |
그래프 데이터 구조 : DFS 대 BFS? (0) | 2020.12.25 |
Google Guice 대 JSR-299 CDI / 용접 (0) | 2020.12.25 |
Windows Azure 동적 콘텐츠에서 gzip HTTP 압축을 활성화하는 방법 (0) | 2020.12.25 |