텍스트 파일로 변환해야하는 다음 xml 코드가 있습니다. 나는 XSLT의 네임 스페이스에 엄청난 노력을 기울이고있다. 나는 Export/Record와 간단한 기본 네임 스페이스 매치를하는 데 익숙하다.xml에서 일치하는 XSLT 템플릿
<?xml version="1.0" encoding="utf-8"?>
<ArrayOfPerson xmlns:i="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://schemas.datacontract.org/2004/07/MultiCountryIntegrationService.Core.Entities.Dto">
<Person>
<Addresses>
<Address>
<City>London</City>
<Country>GB</Country>
<County>London</County>
<CreatedDate xmlns:d5p1="http://schemas.datacontract.org/2004/07/System">
<d5p1:DateTime>2017-02-21T11:05:08.8387752Z</d5p1:DateTime>
<d5p1:OffsetMinutes>0</d5p1:OffsetMinutes>
</CreatedDate>
<DeletedDate xmlns:d5p1="http://schemas.datacontract.org/2004/07/System" i:nil="true" />
<EndDate xmlns:d5p1="http://schemas.datacontract.org/2004/07/System" i:nil="true" />
<Extension i:nil="true" />
<Id>8e5b30d0</Id>
<ModifiedDate xmlns:d5p1="http://schemas.datacontract.org/2004/07/System" i:nil="true" />
<Number>8</Number>
<StartDate xmlns:d5p1="http://schemas.datacontract.org/2004/07/System">
<d5p1:DateTime>2016-06-30T22:00:00Z</d5p1:DateTime>
<d5p1:OffsetMinutes>120</d5p1:OffsetMinutes>
</StartDate>
<Street>Somewhere</Street>
<Type>Primary</Type>
<ZipCode>L1 1LL</ZipCode>
</Address>
</Addresses>
<PersonLocalReferences xmlns:d3p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays" />
</Person>
<Person>
<Addresses>
<Address>
<City>Birmingham</City>
<Country>ETC...</Country>
</Address>
</Addresses>
<PersonLocalReferences xmlns:d3p1="http://schemas.microsoft.com/2003/10/Serialization/Arrays" />
</Person>
</ArrayOfPerson>
내 XSLT - 당신은 내가, 몇 가지 방법을 시도 구글과 유래에 수많은 시간을했습니다 볼 수 있듯이 : 나는 다음과 같은 XML 코드가 있습니다. XML에서 i:
및 xmlns
을 제거하면 스타일 시트가 작동하지만 XML을 변경할 수있는 위치에 있지 않습니다. Visual Studio 2016을 사용하여 xslt를 만들고 실행합니다. "@* | node()"
을 사용하면 모든 것을 얻을 수 있으며 텍스트 파일에 특정 비트의 정보 만 출력하고 싶습니다.
아래 xslt를 실행하면 머리말과 EOF가 표시되어 <xsl:apply-templates select="ArrayOfPerson/Person"/>
이 올바른 수준의 데이터를 선택하지 않은 것처럼 보입니다. 마이클은 자신의 의견에 썼던 것처럼
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="2.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns:i="http://www.w3.org/2001/XMLSchema-instance" exclude-result-prefixes="i">
<xsl:output omit-xml-declaration="yes" />
<xsl:template match="/">
<xsl:call-template name="header" />
<xsl:text>Person</xsl:text>
<xsl:apply-templates select="ArrayOfPerson/Person"/>
<xsl:value-of select="$newline" />
<xsl:text>EOF</xsl:text>
</xsl:template>
<xsl:template match="Person">
<xsl:value-of select="ArrayOfPerson/Person/Addresses/Address/City"/>
<xsl:value-of select="Person/Addresses/Address/City"/>
<xsl:value-of select="Addresses/Address/City"/>
<xsl:value-of select="."/>
<xsl:value-of select="$newline" />
<xsl:text>match</xsl:text>
<xsl:value-of select="$newline" />
</xsl:template>
</xsl:stylesheet>
질문에 xslt 2.0 태그를 붙이고 스타일 시트에 version = "2.0"이라고 쓰여 있지만 Visual Studio 2016을 사용하고 있다고 말하면서 1.0 만 지원한다고 생각합니다. 이것은 xpath-default-namespace 속성의 사용 여부에 영향을줍니다. –
"XSLT 기본 네임 스페이스"를 검색하면이 질문에 대한 1,000 가지 답변을 찾을 수 있습니다. ArrayOfPerson은 네임 스페이스에 있지만 네임 스페이스가없는 ArrayOfPerson을 선택합니다. –
정보를 제공해 주셔서 감사합니다. 나는 Visual Studio가 v2.0을 할 수 없다는 것을 깨닫지 못했다. – Itsallgonepearshaped