使用 xpath、字符串值从 xsd 文件中读取正则表达式
reading regex from xsd file with xpath, string value
我有一个包含以下元素的 XSD 文件:
<xs:element name="orcid" minOccurs="0" maxOccurs="1">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="https://orcid\.org/[0-9]{4}-[0-9]{4}-[0-9]{4}-\d{3}[\dX]"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
我想从该值中读取模式,我这样做了:
with open(app.config.get("schema")) as xsd:
doc = etree.parse(xsd)
data = doc.xpath(ORCID_XPATH, namespaces=doc.getroot().nsmap)[0]
其中
ORCID_XPATH = '/xs:element/xs:simpleType/xs:restriction[@base="xs:string"]/xs:pattern/@value
但结果我得到了一个我不理解的字符串:
'[d0-9]{4}-{0,1}[0-9]{3}[0-9xX]{1}'
你能给我解释一下这里发生了什么吗?
您的路径表达式不是很有选择性,特别是它不符合 xs:element
和 [@name='orcid']
。所以我怀疑您正在选择不同的元素声明。由于您在 Python 中,您可能正在使用 XPath 1.0,它通常会为您提供第一个匹配的节点,而不是警告您存在多个节点。
我有一个包含以下元素的 XSD 文件:
<xs:element name="orcid" minOccurs="0" maxOccurs="1">
<xs:simpleType>
<xs:restriction base="xs:string">
<xs:pattern value="https://orcid\.org/[0-9]{4}-[0-9]{4}-[0-9]{4}-\d{3}[\dX]"/>
</xs:restriction>
</xs:simpleType>
</xs:element>
我想从该值中读取模式,我这样做了:
with open(app.config.get("schema")) as xsd:
doc = etree.parse(xsd)
data = doc.xpath(ORCID_XPATH, namespaces=doc.getroot().nsmap)[0]
其中
ORCID_XPATH = '/xs:element/xs:simpleType/xs:restriction[@base="xs:string"]/xs:pattern/@value
但结果我得到了一个我不理解的字符串:
'[d0-9]{4}-{0,1}[0-9]{3}[0-9xX]{1}'
你能给我解释一下这里发生了什么吗?
您的路径表达式不是很有选择性,特别是它不符合 xs:element
和 [@name='orcid']
。所以我怀疑您正在选择不同的元素声明。由于您在 Python 中,您可能正在使用 XPath 1.0,它通常会为您提供第一个匹配的节点,而不是警告您存在多个节点。