2009-12-30 6 views

답변

1

먼저 호출 처리 명령을 사용하여 사용하고자하는 모든 네임 스페이스를 사용할 수 있는지 확인 XML 파일에 스타일 시트를 부착하려면 xslt. 예를 들어,과 같이, 상위 요소에 그들 모두를위한의 xmlns 접두사를 정의 : 그 후

<?xml version="1.0" encoding="ISO-8859-1"?> 
<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:jskit="http://purl.org/dc/elements/1.1/" 
> 
    ... xslt templates go here... 
</xsl:stylesheet> 

을, 당신은 당신의 XPath 식에 네임 스페이스 접두사 jskit를 사용할 수 있습니다.

<?xml version="1.0" encoding="ISO-8859-1"?> 
<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:jskit="http://purl.org/dc/elements/1.1/" 
> 
    <!-- match all items anywhere in the document --> 
    <xsl:template match="//item"> 
     <!-- get the "value" attribute of the "jskit:attribute" element 
       in the current item in case the "key" attribute is called "permalink" 
     --> 
     <xsl:value-of select="jskit:attribute[@key='permalink']/@value"/> 
     , <!-- comma separator, literal txt -->    
     <!-- get the "value" attribute of the "jskit:attribute" element 
       in the current item in case the "key" attribute is called "IP" 
     --> 
     <xsl:value-of select="jskit:attribute[@key='IP']/@value"/>  
    </xsl:template> 
</xsl:stylesheet> 

사용자가 작성해야하는 템플릿과 XPath는 원하는 출력 형식의 요구 사항에 완전히 의존하고 우리가 nformation에게

부족하지만 이제 당신이 원하는 가정 해 봅시다 경우이 전체에 대답하기 쉽지 않다 데이터베이스에 데이터를 삽입, 당신은 다음 XSLT와 직접 SQL 문을 생성 할 수 :

<?xml version="1.0" encoding="ISO-8859-1"?> 
<xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:jskit="http://purl.org/dc/elements/1.1/" 
> 
    <!-- make text output (SQL script) --> 
    <xsl:output 
     method="text" 
    /> 

    <!-- match all items anywhere in the document --> 
    <xsl:template match="//item"> 
     INSERT INTO myTable(permalink, IP) VALUES 
     ('<xsl:value-of select="jskit:attribute[@key='permalink']/@value"/>' 
     ,'<xsl:value-of select="jskit:attribute[@key='IP']/@value"/>'); 
    </xsl:template> 
</xsl:stylesheet> 

을하지만, 이런 종류의 정말 강력하게, 당신은 확인해야하는 SQL 문에 결국 값 문자열 de를 포함하지 않는다. 리미터. 예를 들어 permalink가 작은 따옴표를 포함 할 수 있다면 값에서 작은 따옴표가 문자열 리터럴 SQL 값을 중간에 끝내기 때문에 잘못된 SQL을 생성합니다.

그 대응하려면 재귀 (떨어져 인용에서와 데이터베이스에 따라 너무 다른 문자를 이스케이프해야 할 수도 있습니다)을 필요로하는 그 문자를 이스케이프하는 텍스트 값을 처리하는 템플릿을 작성할 수 있습니다

Anothter 접근 방식은 XSLT를 사용하여 호스트 언어로 쉽게 구문 분석 할 수있는 형식으로 데이터를 변환하는 것입니다. PHP를 사용하고 있다면 XSLT를 사용하여 XML을 ini 파일 형식으로 변환하고 parse_ini_file()을 사용하여 구문 분석 한 다음 PHP를 사용하여 값을 적절히 이스케이프/유효성 검증 한 다음 데이터베이스 작업을 수행하십시오.

YMMV

0

문제의 노드에 대한 XPath 식을 여기에 주어진 하나의 단계가

에서 메신저 :

를 0
/rss/channel/item/jskit:attribute[@key='IP']/@value 

/rss/channel/item/jskit:attribute[@key='permalink']/@value 

/rss/channel/item/jskit:parent-guid 

처음 두 개는 'IP'또는 'permalink'와 동일한 키가있는 노드를 선택하기 위해 술어를 사용합니다. 세 번째는 단일 노드를 선택하는 일반 표현식입니다.

네임 스페이스로 이러한 노드에 액세스하려면 XSLT에서 네임 스페이스 접두사를 정의해야합니다. 이 작업은 <xsl:stylesheet> 요소에서 수행됩니다. 이 응용 프로그램의 경우 XML 소스에서 선언을 복사 할 수 있습니다.

XSLT에 전체 예를

<?xml version="1.0"?> 
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" 
    xmlns:dc="http://purl.org/dc/elements/1.1/" 
    xmlns:atom="http://www.w3.org/2005/Atom" 
    xmlns:media="http://search.yahoo.com/mrss/" 
    xmlns:jskit="http://purl.org/dc/elements/1.1/" 
    exclude-result-prefixes="atom media jskit dc"> 

    <xsl:template match="/"> 
     <ip> 
      <xsl:value-of 
       select="/rss/channel/item/jskit:attribute[@key='IP']/@value"/> 
     </ip> 
     <permalink> 
      <xsl:value-of 
       select="/rss/channel/item/jskit:attribute[@key='permalink']/@value"/> 
     </permalink> 
     <parent-guid> 
      <xsl:value-of 
       select="/rss/channel/item/jskit:parent-guid"/> 
     </parent-guid> 
    </xsl:template> 
</xsl:stylesheet> 

, xml-stylesheet

<?xml version="1.0"?> 
<?xml-stylesheet href="rss.xsl" type="text/xsl" ?> 
<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" 
    xmlns:atom="http://www.w3.org/2005/Atom" 
    xmlns:media="http://search.yahoo.com/mrss/" 
    xmlns:jskit="http://purl.org/dc/elements/1.1/" > 
+0

@ 피터 .. 전체 예를 들어 너무 많이 들으 나는 내가 열 (25)의 오류를 1 행에 오류가 XML로 XSL 첨부 할 경우 다음의 끝에 추가 내용 문서 – vk123

+1

xslt는 .xsl 파일로 이동하고 xml은 .xml 파일로 이동합니다. xslt를 xml에 연결하려면

+0

Peter와 Roland에게 감사해야합니다. 마침내 뭔가를 얻는 것! – vk123

0

PHP 포기 후 나는 XSLT

포기 무엇

를 사용하여 XML에서 데이터를 추출하기 위해 노력하고있어? PHP는 XML을 잘 지원합니다. DomXPath을 사용하여 xml 문서에서 쿼리 할 수 ​​있습니다. 먼저 registerNamespace을 사용하여 네임 스페이스 속성을 쿼리 할 수 ​​있습니다. 예 :

$doc = new DOMDocument(); 
$doc->loadXML($xml); 
$xpath = new DOMXPath($doc); 
$xpath->registerNamespace("jskit", "http://purl.org/dc/elements/1.1/"); 
$query = "//jskit:attribute[@key='permalink']"; 
foreach ($xpath->evaluate($query) as $node) { 
    echo $node, "\n"; 
} 
+0

그 대답은 원본 질문에서 완벽 할 것입니다. http://stackoverflow.com/questions/1977072/rss-xml-namespace-confusion –