在 Node 中如何从 xml 中提取数据?

In Node how to extract data from xml?

我正在使用 libxmljs2 我有这个 XML:

<Document xmlns="http://hl7.org/fhir">...

<address>
    <type value="both" />
    <line value="Avenue 123">
        <extension url="http://hl7.org/fhir/StructureDefinition/iso21090-ADXP-houseNumber">
            <valueString value="123" />
        </extension>
        <extension url="http://hl7.org/fhir/StructureDefinition/iso21090-ADXP-streetName">
            <valueString value="Avenue" />
        </extension>
    </line>
    <city value="Amsterdam" />
    <postalCode value="10623" />
</address>

address 中,我可以像这样提取 值:

    NAME_SPACE = { ns: 'http://hl7.org/fhir' }
    const myAddress = doc.get('//ns:Address/ns:line', NAME_SPACE) // Avenue 123

但是如何单独提取扩展名 valueStrings

类似于:

const houseNumber = 
const streetName = 

您只需遍历将父 extension url 组件映射到其项目值的 valueString 项目:

const NAME_SPACE = { ns: 'http://hl7.org/fhir' }
const myAddress = doc.get('//ns:Address/ns:line', NAME_SPACE)
const addressDetails = {}
myAddress.forEach(node => {
    const parentExtensionUrl = node.parent().attr('url').value();
    const addressDetailsItemName = parentExtensionUrl.substring(parentExtensionUrl.lastIndexOf('-') + 1);
    addressDetails[addressDetailsItemName] = node.attr('value').value()
});

我不了解 Node,但看起来您可以使用 xpath 查询从 xml 中提取值。在 xpath 中,您可以按属性过滤节点。

例如房号:

//ns:Address/ns:line/ns:extension[@url='http://hl7.org/fhir/StructureDefinition/iso21090-ADXP-houseNumber']/ns:valueString/@value