使用 XPath 查询从 XML 中获取值

Posted

技术标签:

【中文标题】使用 XPath 查询从 XML 中获取值【英文标题】:Get values from XML with XPath query 【发布时间】:2022-01-04 16:19:54 【问题描述】:

我需要通过 XPath 查询从我在这里报告的 XML 文件中推断出一系列值。 特别是我想要阅读标签

<IDdocumento>0406304e92814307b6f4aedbece1670a</IDdocumento>

提取值0406304e92814307b6f4aedbece1670a&lt

以及下面的标签

年报摘录2019

Codice financee intestatario fattura 提取00532730371

Ragione sociale o cognome e nome 提取OBER SPA

我尝试了一个查询,例如

//attribute[@code="ANNOFISC"/@name="Anno fiscale"]/@value

但无济于事

您能给我一些建议吗? 非常感谢谁能提供帮助

再见

<attribute code="ANNOFISC" name ="Anno fiscale"  value="2019"/>
    <attribute code="CODFISCALE" name ="Codice fiscale intestatario fattura"  value="00532730371"/>
    <attribute code="CODFISCAZI" name ="Codice fiscale azienda"  value="00543720981"/>

    <?xml version="1.0" encoding="UTF-8"?><sincro:IdC xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:sincro="http://www.uni.com/U3011/sincro/" xsi:schemaLocation="http://www.uni.com/U3011/sincro/ http://www.uni.com/U3011/sincro/IdC.xsd" sincro:url="http://www.uni.com/U3011/sincro/" sincro:version="1.0"><sincro:SelfDescription><sincro:ID sincro:scheme="local">1a769149a67d41fca5f6316a70e19cfb</sincro:ID><sincro:CreatingApplication><sincro:Name>Conservazione digitale Zucchetti</sincro:Name><sincro:Version>2.3</sincro:Version><sincro:Producer>Zucchetti SPA</sincro:Producer></sincro:CreatingApplication></sincro:SelfDescription><sincro:VdC><sincro:ID sincro:scheme="local">0ac79c41a62d4ddaa565c0bb9f4a8e1d</sincro:ID><sincro:VdCGroup><sincro:Label>Documenti contabili e fiscali</sincro:Label><sincro:ID sincro:scheme="local">4a739b70450b473ab0a7bee071b1276c</sincro:ID><sincro:Description sincro:language="it">Documenti contabili e fiscali</sincro:Description></sincro:VdCGroup></sincro:VdC><sincro:FileGroup><sincro:Label>Documenti contabili e fiscali</sincro:Label><sincro:File sincro:encoding="binary" sincro:extension="xml" sincro:format="application/xml"><sincro:ID sincro:scheme="local">0406304e92814307b6f4aedbece1670a</sincro:ID><sincro:Path>IT00532730371_003MZ.xml</sincro:Path><sincro:Hash sincro:canonicalXML="true" sincro:function="SHA-256">771A44BB6507BE077C8D5D7D81EEF3657DE588E43C913E118223E2FB0BFE710C</sincro:Hash><sincro:MoreInfo sincro:XMLScheme="file:///var/www/webapps/infinitycodi/WEB-INF/XMLSchema/sincro_file.xsd"><sincro:EmbeddedMetadata>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
    &lt;document ownercode="" extcode="" description="IT00532730371_003MZ.xml"&gt;
    &lt;datachiusura&gt;24/11/2019 13:35:27&lt;/datachiusura&gt;
    &lt;oggettodocumento&gt;Fatture Passive&lt;/oggettodocumento&gt;
    &lt;soggettoproduttore&gt;
    &lt;ragionesociale&gt;FORNITURE TECNICHE INDUSTRIALI ABC&lt;/ragionesociale&gt;
    &lt;codicefiscale&gt;00704580166&lt;/codicefiscale&gt;
    &lt;partitaiva&gt;00543720981&lt;/partitaiva&gt;
    &lt;/soggettoproduttore&gt;
    &lt;destinatario&gt;
    &lt;ragionesociale&gt;Sistema di Conservazione&lt;/ragionesociale&gt;
    &lt;/destinatario&gt;
    &lt;IDdocumento&gt;0406304e92814307b6f4aedbece1670a&lt;/IDdocumento&gt;
    &lt;attributes class="FATTURAPASSIVA" name = "Fatture Passive                                   "&gt;
    &lt;attribute code="ANNOFISC" name ="Anno fiscale"  value="2019"/&gt;
    &lt;attribute code="CODFISCALE" name ="Codice fiscale intestatario fattura"  value="00532730371"/&gt;
    &lt;attribute code="CODFISCAZI" name ="Codice fiscale azienda"  value="00543720981"/&gt;
    &lt;attribute code="CODSOG" name ="Codice azienda"  value="000000000000245"/&gt;
    &lt;attribute code="DATADOC" name ="Data documento"  value="20191030"/&gt;
    &lt;attribute code="DATRIC" name ="Data ricezione del documento"  value="20191031"/&gt;
    &lt;attribute code="IDDOCUMEN" name ="Identificativo univoco del documento"  value="naejcixpihykbmdi"/&gt;
    &lt;attribute code="NUMERODOC" name ="Numero documento"  value="V1  002052"/&gt;
    &lt;attribute code="PARTITAIVA" name ="Partita IVA"  value="00513531202"/&gt;
    &lt;attribute code="RAGSOC" name ="Ragione sociale o cognome e nome"  value="OBER SPA"/&gt;
    &lt;/attributes&gt;
    &lt;/document&gt;</sincro:EmbeddedMetadata></sincro:MoreInfo></sincro:File><sincro:File sincro:encoding="binary" sincro:extension="xml" sincro:format="application/xml"><sincro:ID sincro:scheme="local">b7962a12d44441f9a59cc1cb4824960a</sincro:ID><sincro:Path>IT02355260981_3zAcj.xml.p7m</sincro:Path><sincro:Hash sincro:canonicalXML="true" sincro:function="SHA-256">148237FBCFF5B310DB4B0B3B48F13C3BB886CA124B86E20C1F5F46202AF762C6</sincro:Hash><sincro:MoreInfo sincro:XMLScheme="file:///var/www/webapps/infinitycodi/WEB-INF/XMLSchema/sincro_file.xsd"><sincro:EmbeddedMetadata>&lt;?xml version="1.0" encoding="UTF-8"?&gt;
    &lt;document ownercode="" extcode="" description="IT02355260981_3zAcj.xml.p7m"&gt;
    &lt;datachiusura&gt;31/10/2019 - 14:56:46&lt;/datachiusura&gt;
    &lt;oggettodocumento&gt;Fatture Passive&lt;/oggettodocumento&gt;
    &lt;soggettoproduttore&gt;
    &lt;ragionesociale&gt;FORNITURE TECNICHE INDUSTRIALI ABC&lt;/ragionesociale&gt;
    &lt;codicefiscale&gt;00704580166&lt;/codicefiscale&gt;
    &lt;partitaiva&gt;00543720981&lt;/partitaiva&gt;
    &lt;/soggettoproduttore&gt;
    &lt;destinatario&gt;
    &lt;ragionesociale&gt;Sistema di Conservazione&lt;/ragionesociale&gt;
    &lt;/destinatario&gt;
    &lt;IDdocumento&gt;b7962a12d44441f9a59cc1cb4824960a&lt;/IDdocumento&gt;
    &lt;attributes class="FATTURAPASSIVA" name = "Fatture Passive                                   "&gt;
    &lt;attribute code="ANNOFISC" name ="Anno fiscale"  value="2019"/&gt;
    &lt;attribute code="CODFISCALE" name ="Codice fiscale intestatario fattura"  value="05891470154"/&gt;
    &lt;attribute code="CODFISCAZI" name ="Codice fiscale azienda"  value="00543720981"/&gt;
    &lt;attribute code="CODSOG" name ="Codice azienda"  value="000000000000245"/&gt;
    &lt;attribute code="DATADOC" name ="Data documento"  value="20191031"/&gt;
    &lt;attribute code="DATRIC" name ="Data ricezione del documento"  value="20191031"/&gt;
    &lt;attribute code="IDDOCUMEN" name ="Identificativo univoco del documento"  value="bpogsznntdynvxgt"/&gt;
    &lt;attribute code="NUMERODOC" name ="Numero documento"  value="E00797"/&gt;
    &lt;attribute code="PARTITAIVA" name ="Partita IVA"  value="05891470154"/&gt;
    &lt;attribute code="RAGSOC" name ="Ragione sociale o cognome e nome"  value="TUNGSTEN CARBIDE TOOLS S.R.L."/&gt;
    &lt;/attributes&gt;
    &lt;/document&gt;</sincro:EmbeddedMetadata></sincro:MoreInfo></sincro:File><sincro:File sincro:encoding="binary" sincro:extension="xml" sincro:format="application/xml"><sincro:ID sincro:scheme="local">2ea9e60ef1764f6b9b8e14ac4916b5e3</sincro:ID><sincro:Path>704a5022a86644c3b280daf818d7142f.xml.p7m</sincro:Path><sincro:Hash sincro:canonicalXML="true" sincro:function="SHA-256">E53FCB957DD40B653C49C1A634DFD37823CCC50213D9FF140BA7F9AD2060FF13</sincro:Hash></sincro:File><sincro:File sincro:encoding="binary" sincro:extension="tsr" sincro:format="application/timestamp-reply"><sincro:ID sincro:scheme="local">f42db62908674debb650bd4dd2afcb11</sincro:ID><sincro:Path>704a5022a86644c3b280daf818d7142f.tsr</sincro:Path><sincro:Hash sincro:canonicalXML="true" sincro:function="SHA-256">E6EB052B6B998692DBD92029B82DE87AB4646788A2DAD7E53C160C2F756E42FB</sincro:Hash></sincro:File></sincro:FileGroup><sincro:Process><sincro:Agent sincro:type="person" sincro:role="PreservationManager"><sincro:AgentName><sincro:NameAndSurname><sincro:FirstName>ITALO</sincro:FirstName><sincro:LastName>BERTOLI</sincro:LastName></sincro:NameAndSurname></sincro:AgentName><sincro:Agent_ID sincro:scheme="TaxCode">IT:BRTTLI43M24L087K</sincro:Agent_ID><sincro:MoreInfo sincro:XMLScheme="file:///var/www/webapps/infinitycodi/WEB-INF/XMLSchema/sincro_agent.xsd"><sincro:EmbeddedMetadata>&lt;?xml version="1.0" encoding="UTF-8"?&gt;&lt;Roles&gt;&lt;Role Name= "Responsabile del servizio di conservazione"&gt;&lt;RoleType Name= "Responsabile"&gt;&lt;Companyname&gt;ZUCCHETTI SPA&lt;/Companyname&gt;&lt;NameSurname&gt;&lt;Name&gt;&lt;/Name&gt;&lt;Surname&gt;&lt;/Surname&gt;&lt;/NameSurname&gt;&lt;AddressRole&gt;&lt;Address&gt;VIA SOLFERINO&lt;/Address&gt;&lt;CivicNumber&gt;1&lt;/CivicNumber&gt;&lt;City&gt;LODI&lt;/City&gt;&lt;Province&gt;LO&lt;/Province&gt;&lt;/AddressRole&gt;&lt;TaxCode&gt;05006900962&lt;/TaxCode&gt;&lt;FiscalCode&gt;05006900962&lt;/FiscalCode&gt;&lt;DateStartAssignment&gt;01/09/2015&lt;/DateStartAssignment&gt;&lt;/RoleType&gt;&lt;RoleType Name= "Delegato"&gt;&lt;Companyname&gt;CAMIA PAOLO&lt;/Companyname&gt;&lt;NameSurname&gt;&lt;Name&gt;PAOLO&lt;/Name&gt;&lt;Surname&gt;CAMIA&lt;/Surname&gt;&lt;/NameSurname&gt;&lt;AddressRole&gt;&lt;Address&gt;VIA SOLFERINO&lt;/Address&gt;&lt;CivicNumber&gt;1&lt;/CivicNumber&gt;&lt;City&gt;LODI&lt;/City&gt;&lt;Province&gt;LO&lt;/Province&gt;&lt;/AddressRole&gt;&lt;TaxCode&gt;&lt;/TaxCode&gt;&lt;FiscalCode&gt;CMAPLA64H04B910C&lt;/FiscalCode&gt;&lt;DateStartAssignment&gt;23/06/2017&lt;/DateStartAssignment&gt;&lt;/RoleType&gt;&lt;/Role &gt;&lt;/Roles&gt;</sincro:EmbeddedMetadata></sincro:MoreInfo></sincro:Agent><sincro:TimeReference><sincro:DetachedTimeStamp sincro:normal="2021-11-08T11:25:44.102Z" sincro:encoding="binary" sincro:format="                              ">1a769149a67d41fca5f6316a70e19cfb.tsr</sincro:DetachedTimeStamp></sincro:TimeReference><sincro:LawAndRegulations sincro:language="it">- Codice Civile [Libro Quinto Del lavoro, Titolo II Del lavoro nell'impresa, Capo III Delle imprese commerciali e delle altre imprese soggette a registrazione, Sezione III Disposizioni particolari per le imprese commerciali, Paragrafo 2 Delle scritture contabili], articolo 2215 bis - Documentazione informatica;
    - Legge 7 agosto 1990, n. 241 e s.m.i. – Nuove norme in materia di procedimento amministrativo e di diritto di accesso ai documenti amministrativi;
    - Decreto del Presidente della Repubblica 28 dicembre 2000, n. 445 e s.m.i. – Testo Unico delle disposizioni legislative e regolamentari in materia di documentazione amministrativa;
    - Regolamento (UE) 2016/679 del Parlamento europeo e del Consiglio, del 27 aprile 2016, relativo alla protezione delle persone fisiche con riguardo al trattamento dei dati
    personali, nonché alla libera circolazione di tali dati e che abroga la direttiva 95/46/CE (regolamento generale sulla protezione dei dati), applicabile in tutti gli Stati membri a partire dal 25 maggio 2018;
    - Decreto Legislativo 22 gennaio 2004, n. 42 e s.m.i. – Codice dei Beni Culturali e del Paesaggio;
    - Decreto Legislativo 7 marzo 2005 n. 82 e s.m.i. – Codice dell'amministrazione digitale (CAD);
    - Decreto del Presidente del Consiglio dei Ministri 22 febbraio 2013 – Regole tecniche in materia di generazione, apposizione e verifica delle firme elettroniche avanzate, qualificate e digitali ai sensi degli articoli 20, comma 3, 24, comma 4, 28, comma 3, 32, comma3, lettera b), 35, comma 2, 36, comma 2, e 71;
    - Decreto del Presidente del Consiglio dei Ministri 3 dicembre 2013 - Regole tecniche in materia di sistema di conservazione ai sensi degli articoli 20, commi 3 e 5-bis, 23-ter, comma 4, 43, commi 1 e 3, 44 , 44-bis e 71, comma 1, del Codice dell'amministrazione digitale di cui al decreto legislativo n. 82 del 2005;
    - Decreto del Presidente del Consiglio dei Ministri 3 dicembre 2013 - Regole tecniche per il protocollo informatico ai sensi degli articoli 40-bis ,41,47,57-bis e 71, comma 1, del Codice dell'amministrazione digitale di cui al decreto legislativo n. 82 del 2005;
    - Decreto del Presidente del Consiglio dei Ministri 13 novembre 2014, Regole tecniche in materia di formazione, trasmissione, copia, duplicazione, riproduzione e validazione temporale dei documenti informatici nonché di formazione e conservazione dei documenti informatici delle pubbliche amministrazioni ai sensi degli articoli 20, 22, 23-bis, 23-ter, 40, comma 1, 41, e 71, comma 1, del Codice dell'amministrazione digitale di cui al decreto legislativo n. 82 del 2005.
    - Decreto MEF del 17 giugno 2014 - Modalità di assolvimento degli obblighi fiscali relativi ai documenti informatici ed alla loro riproduzione su diversi tipi di supporto – articolo 21, comma 5, del decreto legislativo n. 82/2005. (Ministero dell'economia e delle finanze);
    - Decreto del Presidente del Consiglio dei Ministri 13 novembre 2014 - Regole tecniche in materia di formazione, trasmissione, copia, duplicazione, riproduzione e validazione temporale dei documenti informatici nonché di formazione e conservazione dei documenti informatici delle pubbliche amministrazioni ai sensi degli articoli 20, 22, 23-bis, 23-ter, 40, comma 1, 41, e 71, comma 1, del Codice dell'amministrazione digitale di cui al decreto legislativo n. 82 del 2005;
    - Circolare AgID 10 aprile 2014, n. 65 - Modalità per l'accreditamento e la vigilanza sui soggetti pubblici e privati che svolgono attività di conservazione dei documenti informatici di cui all'articolo 44-bis, comma 1, del decreto legislativo 7 marzo 2005, n. 82;
    - Il Regolamento (UE) n. 910/2014 eIDAS (electronic IDentification Authentication and Signature), costituisce una base normativa comune per i Paesi membri dell'U.E. per quanto riguarda i servizi fiduciari, i mezzi di identificazione elettronica e le modalità di interazioni elettroniche sicure fra cittadini, imprese e pubbliche amministrazioni.</sincro:LawAndRegulations></sincro:Process></sincro:IdC>

【问题讨论】:

【参考方案1】:

我已经编辑了你的问题以添加一些格式:希望我已经抓住了你的意图。

您在这里似乎有一个 XML 文档,其中包含一个元素 syncro:EmbeddedMetaData,其内容是一个包含转义词法 XML 文档的文本节点。这是一个很奇怪的设计。要访问该内部文档的内容,您需要经历两个 XML 解析阶段。这可以在 XPath 3.1 或 XQuery 3.1 中使用 parse-xml() 函数来完成,例如

parse-xml(//syncro:EmbeddedMetaData)
   //attribute[@code="ANNOFISC"]/@value

【讨论】:

非常感谢 Michael Kay 的帮助,不幸的是它在我的情况下似乎不起作用问题是这个查询必须在提取值的应用程序中设置,应用建议的语句软件提示错误消息:“名称空间前缀 'syncro' 未定义 ' 我可以通过应用“命令” / 来读取 XML 的全部内容,但它们无法管理,因为这些值都组合在一起我很感激如有任何进一步的建议再见,请在此处输入图片描述 如果您在 XPath 表达式中使用名称空间前缀,那么您当然必须声明它。如果使用 XQuery,则声明可以出现在查询序言中的“声明命名空间”子句中;如果您使用 XPath,那么您执行此操作的方式取决于您的 XPath 处理器的 API。 (我看到我使用了前缀syncro,而源文档使用了sincro——这种差异不是故意的,但实际上并不重要,只要你将它绑定到命名空间http://www.uni.com/U3011/sincro/)。跨度> 您好,我尝试通过键入 parse-xml(//sincro:EmbeddedMetaData//attribute[@code="ANNOFISC"]/@value 并按照建议输入名称前缀来更改表达式不幸的是,我的软件告诉我“功能无法识别” 我认为无法识别的表达式是:parse-xml 我的应用程序按照与此在线测试器online-toolz.com/tools/xpath-tester-online.php 几乎相同的规则工作,即使在这里,如果我编写 parse 也会报告无法识别的表达式-xml 你觉得还有其他选择吗?非常感谢 正如我所提到的,parse-xml() 需要 XPath 3.1 或 XQuery 3.1。用 XPath 1.0 做到这一点要困难得多。您需要使用一个路径表达式提取内部 XML,在调用应用程序中对其进行解析,然后使用第二个路径表达式查看其中的内容。

以上是关于使用 XPath 查询从 XML 中获取值的主要内容,如果未能解决你的问题,请参考以下文章

使用xpath从xml获取子节点值

java 通过XPath从XML获取值

如何使用 XML::XPath 获取属性?

xpath 只选择相关节点

使用xpath web api c#从xml获取数据

从 HTML 文本中获取特定值