我希望name3
陣列包含上升元素的檔案文本<xsd:element name="PurchaseOrder" type="tns:PurchaseOrderType"/>
。我想要一個通用代碼,它根據 xsd:element 的名稱列印檔案。
我已經成功地使用我提供的 xpath 包含了所有檔案。但我希望我提到的額外條件包含在 xpath 中。
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:tns="http://tempuri.org/PurchaseOrderSchema.xsd"
targetNamespace="http://tempuri.org/PurchaseOrderSchema.xsd"
elementFormDefault="qualified">
<xsd:element name="PurchaseOrder" type="tns:PurchaseOrderType"/>
<xsd:complexType name="PurchaseOrderType">
<xsd:annotation>
<xsd:documentation xml:lang="en">
commmennttt
</xsd:documentation>
</xsd:annotation>
<xsd:sequence>
<xsd:element name="ShipTo" type="tns:USAddress" maxOccurs="2"/>
<xsd:element name="BillTo" type="tns:USAddress"/>
</xsd:sequence>
<xsd:attribute name="OrderDate" type="xsd:date"/>
</xsd:complexType>
<xsd:complexType name="USAddress">
<xsd:sequence>
<xsd:element name="name" type="xsd:string"/>
<xsd:element name="street" type="xsd:string"/>
<xsd:element name="city" type="xsd:string"/>
<xsd:element name="state" type="xsd:string"/>
<xsd:element name="zip" type="xsd:integer"/>
</xsd:sequence>
<xsd:attribute name="country" type="xsd:NMTOKEN" fixed="US"/>
</xsd:complexType>
</xsd:schema>
t3 = etree.ElementTree(file='new.xsd')
name3 = t3.xpath("//xsd:documentation[text()]", namespaces={"xsd":"http://www.w3.org/2001/XMLSchema"})
name3 = [a.text for a in name3]
print(name3[0])
謝謝
uj5u.com熱心網友回復:
按條件查找xsd:element
,然后按包含xsd:documentation
后代的下一個兄弟查找。
from lxml import etree
crit = 'PurchaseOrder'
t3 = etree.parse('test.xsd')
ns = {"xsd":"http://www.w3.org/2001/XMLSchema"}
xpathExpr=f"//xsd:element[@name='{crit}']/following-sibling::*//xsd:documentation[text()]"
print(xpathExpr)
name3 = t3.xpath(xpathExpr, namespaces=ns)
# avoid reusing a variable for a different purpose
comments = [a.text for a in name3]
print(comments)
結果
//xsd:element[@name='PurchaseOrder']/following-sibling::*//xsd:documentation[text()]
['\n commmennttt\n ']
uj5u.com熱心網友回復:
在 XML 檔案中查找資訊,無論是模式還是其他任何內容,都意味著您需要知道可以依賴哪些不變數。如果這可能是任何有效的模式,那么您的任務就非常困難(尤其是如果它使用 xs:include 和 xs:import)。如果它永遠不會改變,那么你根本不需要訪問它,因為你已經知道那里有什么。在這兩個極端之間,您需要清楚地了解哪些內容將保持不變,哪些內容可能會發生變化。我們無法從一份樣本檔案中得出結論。如果只是評論會發生變化,那么您可以使用@LMC 答案中的方法。如果可能出現更激進的變化,那么這種方法就會失效。使用 API 訪問已編譯模式的模式,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/536416.html
標籤:XML
上一篇:如何在不使用autoSizeTextType的情況下自動調整ConstraintLayout中的TextView?