PHP에서 포기 한 후 XSLT네임 스페이스 속성을 선택하기위한 XSLT
<jskit:attribute key="permalink"
데이터를 일치하는 방법 이름 값 쌍에 대해 비슷한 질문을 보았다.
내 xml 여기에 주어집니다 xml source
PHP에서 포기 한 후 XSLT네임 스페이스 속성을 선택하기위한 XSLT
<jskit:attribute key="permalink"
데이터를 일치하는 방법 이름 값 쌍에 대해 비슷한 질문을 보았다.
내 xml 여기에 주어집니다 xml source
먼저 호출 처리 명령을 사용하여 사용하고자하는 모든 네임 스페이스를 사용할 수 있는지 확인 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
문제의 노드에 대한 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/" >
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";
}
그 대답은 원본 질문에서 완벽 할 것입니다. http://stackoverflow.com/questions/1977072/rss-xml-namespace-confusion –
@ 피터 .. 전체 예를 들어 너무 많이 들으 나는 내가 열 (25)의 오류를 1 행에 오류가 XML로 XSL 첨부 할 경우 다음의 끝에 추가 내용 문서 – vk123
xslt는 .xsl 파일로 이동하고 xml은 .xml 파일로 이동합니다. xslt를 xml에 연결하려면 xml-stylesheet href = "rss.xsl"type = "text/xsl"?> –
Peter와 Roland에게 감사해야합니다. 마침내 뭔가를 얻는 것! – vk123