E4X : 네임 스페이스로 노드를 잡으시겠습니까?
-
06-09-2019 - |
문제
E4X에서 네임 스페이스로 XML을 처리하는 방법을 배우고 싶습니다. 기본적으로 여기에 배우고 싶은 것이 있습니다. XML이 다음과 같은 것입니다.
<rdf:RDF
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns="http://purl.org/rss/1.0/">
<rdf:item value="5"/>
<item value="10"/>
</rdf:RDF>
어떻게 할당 할 수 있습니까? <rdf:item/>
VAR에 전화하십시오 rdfitems 그리고 <item/>
VAR에 전화하십시오 레지 셈?
감사!
해결책
이것이 정확히 질문에 답변하는지 여부는 확실하지 않지만 시나리오가 주어지면 다음 코드는 두 값을 모두 검색합니다 (아래에 참조 된 "XML"변수가 주어진 경우 제공 한 XML 코드의 스 니펫이 포함 된 XML 객체입니다).
// Your "rdf" namespace
namespace rdf = "http://www.w3.org/1999/02/22-rdf-syntax-ns#";
use namespace rdf;
// Your "reg" (i.e, default) namespace
namespace reg = "http://purl.org/rss/1.0/";
use namespace reg;
private function getYourValues():void
{
var rdfitems:String = xml.rdf::item.@value;
var regitems:String = xml.reg::item.@value;
}
요소 이름이 동일하기 때문에 "RDF"항목과 "RDF"항목 사이에 구별이 필요하므로 두 번째 네임 스페이스는 각 항목을 독립적으로 검색 할 수 있도록 선언됩니다. 도움이되기를 바랍니다!
다른 팁
여러 이름이 포함 된 XML이 있지만 XML에서 값을 얻을 때 네임 스페이스에 신경 쓰지 않는 경우 다음을 수행 할 수 있습니다 ....
예제 XML
<ns1:Item>
<ns1:ItemType>Printed Material</ns1:ItemType>
<ns2:Book isbn="123456">
<ns2:Author>
<ns2:FirstName>James</ns2:FirstName>
<ns2:LastName>Smith</ns2:LastName>
</ns2:Author>
<ns2:Title>The Book Title</ns2:Title>
</ns2:Book>
<ns1:Item>
이와 같은 네임 스페이스에 관계없이 모든 항목을 얻을 수 있습니다.
var itemType:String = xml.*::ItemType;
var bookISBN:Number = xml.*::Book.@isbn;
var bookTitle:String = xml.*::Book.Title;
네임 스페이스를 모르는 경우 처리해야 할 다양한 방법이 있습니다.
node.namespace().prefix //returns prefix i.e. rdf
node.namespace().uri //returns uri of prefix i.e. http://www.w3.org/1999/02/22-rdf-syntax-ns#
node.inScopeNamespaces() //returns all inscope namespace as an associative array like above
//returns all nodes in an xml doc that use the namespace
var nsElement:Namespace = new Namespace(node.namespace().prefix,
node.namespace().uri);
var usageCount:XMLList = node..nsElement::*;
가장 좋은 방법은 그냥 놀리는 것입니다. 그러나 나는 XML을 필터링하기 위해 Prediate Logic 명령문을 좋아합니다.
이것이 네임 스페이스를 동적으로 처리 할 수있는 아이디어를 제공하기를 바랍니다.
문안 인사,
존
제휴하지 않습니다 StackOverflow