使用 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,它通常会为您提供第一个匹配的节点,而不是警告您存在多个节点。