2014-09-26 13 views
0

구성 변환을 시도하고 있습니다. 설정 파일에서 나는구성 변환을위한 XSLT 패턴 일치

<system.serviceModel> 
<client> 
    <endpoint address="net.pipe://localhost/someservice" ....../> 
</client> 

내가 '로컬 호스트'를 사용하여 XSLT 변환을 교체 할 필요가 있습니다. 나는 정규식을 사용하여 주위에 내 길잡이를 얻을 수 없습니다. 이 스크립트는 트릭을 할해야

답변

0

감사 : 사용자의 입력 XML 파일이 잘 형성해야

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
    <xsl:output method="xml" indent="yes" /> 

    <xsl:template match="@* | node()"> 
     <xsl:copy> 
      <xsl:apply-templates select="@* | node()"/> 
     </xsl:copy> 
    </xsl:template> 

    <xsl:template match="endpoint/@address"> 
     <xsl:attribute name="address"><xsl:value-of select="replace(current(),'localhost','www.myhost.com')"/></xsl:attribute> 
    </xsl:template> 
</xsl:stylesheet> 

를 적어 둡니다. 다른 모든 노드를 포함하는 루트 XML 노드가 있어야합니다. 아래 내 테스트 소스 XML을 참조하십시오. 루트 노드 이름을 "xml"으로 정했습니다. 그리고 "system.serviceModel"노드에는 닫는 태그가 있어야합니다.

소스 XML :

<xml> 
    <system.serviceModel/> 
    <client> 
     <endpoint address="net.pipe://localhost/someservice"/> 
    </client> 
</xml> 

결과 XML :

<?xml version="1.0" encoding="UTF-8"?> 
<xml> 
    <system.serviceModel/> 
    <client> 
     <endpoint address="net.pipe://www.myhost.com/someservice"/> 
    </client> 
</xml> 
+2

XSLT/XPath는 1.0)' 기능. – Tomalak

1

변환 ID를 사용하여이 템플릿을 추가하지 : (더는 '대체했다

<xsl:template match="@address[contains(., '://localhost/')]"> 
    <xsl:attribute name="{name()}"> 
    <xsl:value-of select="substring-before(., 'localhost')" /> 
    <xsl:text>replacement value</xsl:text> 
    <xsl:value-of select="substring-after(., 'localhost')" /> 
    </xsl:attribute> 
</xsl:template> 
+0

고마워요! 그러나 XSLT에서 예를 들어 대체 할 수 있습니까? 연결 문자열 나는 ​​(# SERVER #),! (# HOST #) 그리고 다른 xml (이 비트는 할 수있다!)에서 값을 가져온다. C# 에서처럼 정규 표현식을 수행하고 키를 읽고 값을 가져 와서 출력 XML을 대체 할 수 있습니다. 도와 줘서 고마워. – Vivek