从 xml 的元素中提取名称空间属性
Extract namespace attribute from elements of xml
有 XML 个文件(如下所示)。我想知道如何使用 MSXML6.0 解析器从 AppHdr 和 Document 元素中提取名称空间(xmlns 属性)。
我可以将 AppHdr 的名称空间属性的路径表示为“Messages/:AppHdr/namespace::”,但它适用于 xPath 2.0 及更高版本。
如果我尝试使用这样的路径 (Messages/:AppHdr/namespace::) 将 xsl 发送到 msxml6.0 它 returns 错误。
<?xml version="1.0" encoding="utf-8" ?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" encoding="utf-8">
<xsl:template match="Messages/*:AppHdr/namespace::*">
<xsl:copy>
<xsl:value-of select="."/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
msxsl.exe error
谁能提出 xpath-expression 的正确观点?
XML 文件:
<?xml version="1.0" encoding="utf-8"?>
<Messages>
<AppHdr xmlns="urn:iso:std:iso:20022:tech:xsd:head.001.001.01">
<Fr>
<OrgId>
<Nm>Open Brok Ltd.</Nm>
<Id>
<OrgId>
<Othr>
<Id>1083732703772</Id>
<Issr>OGRN</Issr>
</Othr>
</OrgId>
</Id>
</OrgId>
</Fr>
<BizMsgIdr>12345</BizMsgIdr>
<MsgDefIdr>semt.017.001.09</MsgDefIdr>
<CreDt>2020-01-24T14:32:23Z</CreDt>
</AppHdr>
<Document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:iso:std:iso:20022:tech:xsd:semt.017.001.09">
<SctiesTxPstngRpt>
<Pgntn>
<PgNb>1</PgNb>
<LastPgInd>true</LastPgInd>
</Pgntn>
<StmtGnlDtls>
<RptNb>
<Shrt>000</Shrt>
</RptNb>
<StmtPrd>
<FrDtToDt>
<FrDt>2017-04-04</FrDt>
<ToDt>2017-04-04</ToDt>
</FrDtToDt>
</StmtPrd>
<Frqcy>
<Cd>DAIL</Cd>
</Frqcy>
<UpdTp>
<Cd>COMP</Cd>
</UpdTp>
<StmtBsis>
<Cd>SETT</Cd>
</StmtBsis>
<ActvtyInd>true</ActvtyInd>
<SubAcctInd>true</SubAcctInd>
</StmtGnlDtls>
<AcctOwnr>
<Id>
<PrtryId>
<Id>1067534439317</Id>
<Issr>OGRN</Issr>
</PrtryId>
</Id>
</AcctOwnr>
<SfkpgAcct>
<Id>R50938400000</Id>
<Nm>NSD</Nm>
</SfkpgAcct>
<SubAcctDtls>
<SfkpgAcct>
<Id>R50526502570</Id>
<Nm>DVP Euroclear/NSD</Nm>
</SfkpgAcct>
<ActvtyInd>true</ActvtyInd>
<FinInstrmDtls>
<FinInstrmId>
<ISIN>US92719A1060</ISIN>
<Desc>VIMPELCOM-2-ADR</Desc>
</FinInstrmId>
<Tx>
<AcctOwnrTxId>OP201704040000491</AcctOwnrTxId>
<CorpActnEvtId>AdmPor - VIMPELCOM-2</CorpActnEvtId>
<TxDtls>
<TxActvty>
<Cd>CORP</Cd>
</TxActvty>
<SctiesMvmntTp>DELI</SctiesMvmntTp>
<Pmt>FREE</Pmt>
<PstngQty>
<Qty>
<Unit>540000</Unit>
</Qty>
</PstngQty>
<FctvSttlmDt>
<Dt>2017-04-04</Dt>
</FctvSttlmDt>
<TxAddtlDtls>AdmPor - VIMPELCOM-2 от 04.04.2017</TxAddtlDtls>
</TxDtls>
</Tx>
</FinInstrmDtls>
</SubAcctDtls>
</SctiesTxPstngRpt>
</Document>
</Messages>
如果您想知道 AppHdr
元素在什么命名空间中,您可以使用:
<xsl:value-of select="namespace-uri(/Messages/*[local-name()='AppHdr'])"/>
注意表达式:
/Messages/*[local-name()='AppHdr']/namespace::*
将为 AppHdr 元素 select all 命名空间 in-scope - 在 XSLT 1.0 中,xsl:value-of
指令将 return 仅 selected node-set.
的第一个节点的 string-value
有 XML 个文件(如下所示)。我想知道如何使用 MSXML6.0 解析器从 AppHdr 和 Document 元素中提取名称空间(xmlns 属性)。 我可以将 AppHdr 的名称空间属性的路径表示为“Messages/:AppHdr/namespace::”,但它适用于 xPath 2.0 及更高版本。 如果我尝试使用这样的路径 (Messages/:AppHdr/namespace::) 将 xsl 发送到 msxml6.0 它 returns 错误。
<?xml version="1.0" encoding="utf-8" ?>
<xsl:stylesheet version="2.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" encoding="utf-8">
<xsl:template match="Messages/*:AppHdr/namespace::*">
<xsl:copy>
<xsl:value-of select="."/>
</xsl:copy>
</xsl:template>
</xsl:stylesheet>
msxsl.exe error
谁能提出 xpath-expression 的正确观点?
XML 文件:
<?xml version="1.0" encoding="utf-8"?>
<Messages>
<AppHdr xmlns="urn:iso:std:iso:20022:tech:xsd:head.001.001.01">
<Fr>
<OrgId>
<Nm>Open Brok Ltd.</Nm>
<Id>
<OrgId>
<Othr>
<Id>1083732703772</Id>
<Issr>OGRN</Issr>
</Othr>
</OrgId>
</Id>
</OrgId>
</Fr>
<BizMsgIdr>12345</BizMsgIdr>
<MsgDefIdr>semt.017.001.09</MsgDefIdr>
<CreDt>2020-01-24T14:32:23Z</CreDt>
</AppHdr>
<Document xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="urn:iso:std:iso:20022:tech:xsd:semt.017.001.09">
<SctiesTxPstngRpt>
<Pgntn>
<PgNb>1</PgNb>
<LastPgInd>true</LastPgInd>
</Pgntn>
<StmtGnlDtls>
<RptNb>
<Shrt>000</Shrt>
</RptNb>
<StmtPrd>
<FrDtToDt>
<FrDt>2017-04-04</FrDt>
<ToDt>2017-04-04</ToDt>
</FrDtToDt>
</StmtPrd>
<Frqcy>
<Cd>DAIL</Cd>
</Frqcy>
<UpdTp>
<Cd>COMP</Cd>
</UpdTp>
<StmtBsis>
<Cd>SETT</Cd>
</StmtBsis>
<ActvtyInd>true</ActvtyInd>
<SubAcctInd>true</SubAcctInd>
</StmtGnlDtls>
<AcctOwnr>
<Id>
<PrtryId>
<Id>1067534439317</Id>
<Issr>OGRN</Issr>
</PrtryId>
</Id>
</AcctOwnr>
<SfkpgAcct>
<Id>R50938400000</Id>
<Nm>NSD</Nm>
</SfkpgAcct>
<SubAcctDtls>
<SfkpgAcct>
<Id>R50526502570</Id>
<Nm>DVP Euroclear/NSD</Nm>
</SfkpgAcct>
<ActvtyInd>true</ActvtyInd>
<FinInstrmDtls>
<FinInstrmId>
<ISIN>US92719A1060</ISIN>
<Desc>VIMPELCOM-2-ADR</Desc>
</FinInstrmId>
<Tx>
<AcctOwnrTxId>OP201704040000491</AcctOwnrTxId>
<CorpActnEvtId>AdmPor - VIMPELCOM-2</CorpActnEvtId>
<TxDtls>
<TxActvty>
<Cd>CORP</Cd>
</TxActvty>
<SctiesMvmntTp>DELI</SctiesMvmntTp>
<Pmt>FREE</Pmt>
<PstngQty>
<Qty>
<Unit>540000</Unit>
</Qty>
</PstngQty>
<FctvSttlmDt>
<Dt>2017-04-04</Dt>
</FctvSttlmDt>
<TxAddtlDtls>AdmPor - VIMPELCOM-2 от 04.04.2017</TxAddtlDtls>
</TxDtls>
</Tx>
</FinInstrmDtls>
</SubAcctDtls>
</SctiesTxPstngRpt>
</Document>
</Messages>
如果您想知道 AppHdr
元素在什么命名空间中,您可以使用:
<xsl:value-of select="namespace-uri(/Messages/*[local-name()='AppHdr'])"/>
注意表达式:
/Messages/*[local-name()='AppHdr']/namespace::*
将为 AppHdr 元素 select all 命名空间 in-scope - 在 XSLT 1.0 中,xsl:value-of
指令将 return 仅 selected node-set.