2014-05-15 15 views
3

2 'sub_x.xml'파일을 포함하는 'main.xml'파일이 있습니다. include 라인은 'xpointer'를 사용하여 include xml의 특정 태그를 가리키거나 포함합니다. ElementTree를 사용하여 올바르게 작동하는지 확인하면, 원하는 '태그'뿐만 아니라 전체 '하위'XML 파일이 포함되어 있음을 알 수 있습니다. 나는 xpointer를 잘못 사용하고 있는지 또는 ElementTree를 사용하고 있는지 또는 ElementInclude가 이것을 지원하지 않는지 확실하지 않습니다.포함 된 XML 파일에 액세스하기 위해 Python ElementTree/ElementInclude 및 xpointer 사용

------ 'main.xml에'--- --------

`<?xml version='1.0' encoding='utf-8'?> 
<ModelInfo xmlns:xi="http://www.w3.org/2001/XInclude"> 
    <xi:include href="sub_1.xml" xpointer="xpointer(//ModelInfo/Model)" parse="xml" /> 
    <xi:include href="sub_2.xml" xpointer="xpointer(//ModelInfo/Model)" parse="xml" /> 
</ModelInfo>` 

------- 'sub_1.xml': 여기에 파일은 ---

`<?xml version="1.0" ?> 
<ModelInfo> 
    <Model ModelName="glow"> 
    <Variables> 
    <Variable Alias="glow_val" Input="False" Output="True" /> 
    </Variables> 
    </Model> 
</ModelInfo>` 

------- 'sub_2.xml'------

`<?xml version='1.0' encoding='utf-8'?> 
<ModelInfo> 
    <Model ModelName="sirpwr_b_supply8v1"> 
    <Variables> 
    <Variable Alias="sirpwr_a_supplyecu_Snsr8vIstat" Input="True" Output="False" /> 
    </Variables> 
    </Model> 
</ModelInfo>` 
내가으로 ElementTree에 표시 'main.xml에'를 싶습니다

:

`<?xml version='1.0' encoding='utf-8'?> 
<ModelInfo xmlns:xi="http://www.w3.org/2001/XInclude"> 
    <Model ModelName="glow"> 
    <Variables> 
    <Variable Alias="glow_val" Input="False" Output="True" /> 
    </Variables> 
    </Model> 
    <Model ModelName="sirpwr_b_supply8v1"> 
    <Variables> 
    <Variable Alias="sirpwr_a_supplyecu_Snsr8vIstat" Input="True" Output="False" /> 
    <Variable Alias="sirpwr_b_supply8v1_qstat" Input="False" Output="True" /> 
    </Variables> 
    </Model> 
</ModelInfo>` 

스크립트내가 XML 파일과 테스트를로드 실행하고 것은 'ModelInfo'는 'sub_x'xml 파일에서 복사되고 있기 때문에

`tree = ElementTree.parse('main.xml') 
root = tree.getroot() 
ElementInclude.include(root) 
for element in root: 
    print element.tag` 

하는 XPointer가 작동하지 않습니다.

답변

2

ElementInclude은 XInclude를 모두 지원하지 않습니다. <include> 요소의 xpointer 특성은 무시됩니다.

그것은 당신이 lxml 그것을 원하는 방식과 xinclude() 방법 작업을 수행하십시오 XPointer에 xpointer() 방식은 W3C 권고안의 상태에 도달 결코

from lxml import etree 

tree = etree.parse('main.xml') 
tree.xinclude() 
print etree.tostring(tree) 

주 (그것은 여전히 ​​작업 초안입니다). 그것은 libxml2 (lxml 뒤에있는 C 라이브러리)에서 구현되었지만 거의 다른 곳에서는 존재하지 않습니다.