使用 XPath 查询读取文件 XML
Reading file XML with XPath query
早上好
我需要通过 XPath 查询从我在页面末尾报告的 XML 个文件中推断出一系列值。
我能够获得我感兴趣的值,直到模式的文件组级别,例如使用 //FileGroup/File/Path
这样的查询
但是,我无法读取 EmbeddedMetadata 节点中包含的数据
我尝试过各种方式,例如
// FileGroup / File / MoreInfo / EmbeddedMetadata / SubjectDestinatario / Denominazione
和其他人,但我没有得到正确的查询
特别是阅读 Tag 中包含的值对我很有用,例如:
<FileNameOriginale> IT09533610011_173.xml </FileNameOriginale>
<SubjectDestinatario role = "Addressee" type = "organization">
<Denomination> REWIND Srl </Denomination>
<MetadataAggiuntivi name = "NumeroDocumento"
value = "2020047"
正是在这种情况下,我想阅读:
IT09533610011_173.xml
倒带有限公司
2020047
非常感谢您愿意帮助我
<?xml version="1.0" encoding="utf-8"?>
<SIP url="http://www.archismall.com" version="1.0" xmlns:s="http://www.uni.com/U3011/sincro/">
<SelfDescription>
<ID s:scheme="local">IDVc9df21aa-f2f9-4345-a580-c8f777367adc1</ID>
<CreatingApplication>
<Name>ArchiSMALL</Name>
<Version>1.12.2</Version>
<Producer>Archivist SRL</Producer>
</CreatingApplication>
</SelfDescription>
<VdV>
<ID s:scheme="local">SIPc9df21aa-f2f9-4345-a580-c8f777367adc</ID>
</VdV>
<FileGroup>
<File encoding="binary" format="text/xml">
<ID s:scheme="local">a6b72ff7-4287-4f56-96d8-1da9a89d2316</ID>
<Path>document/1/IT09533610011_173.xml</Path>
<Hash function="SHA-256">6fb942e36b879764cb5cf95a2bffa3585f7f04155447ccc38d38441ed7dd6852</Hash>
<MoreInfo xmlns="http://archismall.com/IDV_EmbeddedMetadata_XSD.xsd">
<EmbeddedMetadata>
<FileNameOriginale>IT09533610011_173.xml</FileNameOriginale>
<IdDocumento s:scheme="local">a6b72ff7-4287-4f56-96d8-1da9a89d2316</IdDocumento>
<ImprontaDocumento function="SHA-256">6fb942e36b879764cb5cf95a2bffa3585f7f04155447ccc38d38441ed7dd6852</ImprontaDocumento>
<OggettoDocumento>Fattura Elettronica Passiva</OggettoDocumento>
<DataChiusura normal="+01">2021-01-07 12:41:38</DataChiusura>
<SoggettoProduttore role="Producer" type="organization">
<Denominazione>GEFIR IMMOBILIARE S.R.L.</Denominazione>
<PartitaIva scheme="VATRegistrationNumber">09533610011</PartitaIva>
<CodiceFiscale scheme="TaxCode">09533610011</CodiceFiscale>
</SoggettoProduttore>
<SoggettoDestinatario role="Addressee" type="person">
<Nome>Mario</Nome>
<Cognome>Infanti</Cognome>
<CodiceFiscale scheme="TaxCode">NFNMRA46R09F463G</CodiceFiscale>
</SoggettoDestinatario>
<SoggettoDestinatario role="Addressee" type="organization">
<Denominazione>REWIND Srl</Denominazione>
<PartitaIva scheme="VATRegistrationNumber"/>
<CodiceFiscale scheme="TaxCode">02406910352</CodiceFiscale>
</SoggettoDestinatario>
<MetadataAggiuntivi name="PeriodoEsercizio"
value="2020" xmlns="http://archismall.com/Metadata.xsd"/>
<MetadataAggiuntivi name="NumeroDocumento"
value="2020047" xmlns="http://archismall.com/Metadata.xsd"/>
<MetadataAggiuntivi name="DataDocumento"
value="2020-12-31" xmlns="http://archismall.com/Metadata.xsd"/>
<MetadataAggiuntivi name="TipoDocumento"
value="Fattura" xmlns="http://archismall.com/Metadata.xsd"/>
<MetadataAggiuntivi name="ProgressivoInvio"
value="173" xmlns="http://archismall.com/Metadata.xsd"/>
<MetadataAggiuntivi name="ResponsabileConservazione"
value="Mario Infanti" xmlns="http://archismall.com/Metadata.xsd"/>
</EmbeddedMetadata>
</MoreInfo>
</File>
</FileGroup>
<Process>
<Agent role="Producer" type="person">
<AgentName>
<NameAndSurname>
<FirstName>Mario</FirstName>
<LastName>Infanti</LastName>
</NameAndSurname>
</AgentName>
<Agent_ID scheme="TaxCode">NFNMRA46R09F463G</Agent_ID>
</Agent>
<Agent role="Producer" type="organization">
<AgentName>
<FormalName>REWIND Srl</FormalName>
</AgentName>
<Agent_ID scheme="TaxCode">02406910352</Agent_ID>
</Agent>
<TimeReference>
<TimeInfo normal="+01">2021-01-07 12:41:38</TimeInfo>
</TimeReference>
</Process>
</SIP>
首先感谢您的热心回复
我有一个软件应用程序,必须通过输入正确的 xpath 查询来设置,以提取稍后将写入数据库的数据
该软件还允许您声明命名空间,但实际上我不知道如何管理此功能,所以如果可能的话我宁愿不必使用它
不幸的是,回答大卫的问题我不知道这个应用程序可以支持什么级别的 Xpath,据我所知,我可以说它采用了以下 link[=11 处的 xpath 测试器支持的相同语法=]
https://codebeautify.org/Xpath-Tester
我尝试在测试器中使用此 XML 文件中建议的字符串,我写
*:更多信息/*:嵌入式元数据/*:原始文件名
但显然不成功,因为我没有返回任何值
也许我写错了查询?
也许您提供的信息可以给我进一步的帮助?
非常感谢
如果它是 XPath 1,那么要么了解如何将前缀(例如 idv
)绑定到您环境中的名称空间 http://archismall.com/IDV_EmbeddedMetadata_XSD.xsd
,然后像在例如//idv:MoreInfo/idv:EmbeddedMetadata/idv:FileNameOriginale
到该命名空间中的 select 元素,或者使用本地名称,例如//*[local-name() = 'MoreInfo']/*[local-name() = 'EmbeddedMetadata']/*[local-name() = 'FileNameOriginale']
.
对于 XPath 2 或 3,始终可以使用名称空间通配符,例如//*:MoreInfo/*:EmbeddedMetadata/*:FileNameOriginale
对于命名空间中的那些元素。在 XPath 3 中,您甚至可以在路径的每个步骤中包含名称空间 URI,例如Q{http://archismall.com/IDV_EmbeddedMetadata_XSD.xsd}EmbeddedMetadata
.
我确认问题已解决,尤其是在我的情况下,这种查询结构对我很有用:
//[local-name() ='MoreInfo']/[local-name()='EmbeddedMetadata']/*[local-name () = 'FileNameOriginale']
使用相同的语法,即使没有指定命名空间,我也可以获得 EmbeddedMetadata 组的更多数据
也可以使用如下表达式读取后续节点:
//*[local-name()='AdditionalMetadata'][@name="DocumentNumber"]/@value
非常感谢大家的宝贵帮助
朋友们玩得开心
再见
早上好 我需要通过 XPath 查询从我在页面末尾报告的 XML 个文件中推断出一系列值。
我能够获得我感兴趣的值,直到模式的文件组级别,例如使用 //FileGroup/File/Path
这样的查询但是,我无法读取 EmbeddedMetadata 节点中包含的数据
我尝试过各种方式,例如 // FileGroup / File / MoreInfo / EmbeddedMetadata / SubjectDestinatario / Denominazione 和其他人,但我没有得到正确的查询 特别是阅读 Tag 中包含的值对我很有用,例如:
<FileNameOriginale> IT09533610011_173.xml </FileNameOriginale>
<SubjectDestinatario role = "Addressee" type = "organization">
<Denomination> REWIND Srl </Denomination>
<MetadataAggiuntivi name = "NumeroDocumento"
value = "2020047"
正是在这种情况下,我想阅读: IT09533610011_173.xml 倒带有限公司 2020047
非常感谢您愿意帮助我
<?xml version="1.0" encoding="utf-8"?>
<SIP url="http://www.archismall.com" version="1.0" xmlns:s="http://www.uni.com/U3011/sincro/">
<SelfDescription>
<ID s:scheme="local">IDVc9df21aa-f2f9-4345-a580-c8f777367adc1</ID>
<CreatingApplication>
<Name>ArchiSMALL</Name>
<Version>1.12.2</Version>
<Producer>Archivist SRL</Producer>
</CreatingApplication>
</SelfDescription>
<VdV>
<ID s:scheme="local">SIPc9df21aa-f2f9-4345-a580-c8f777367adc</ID>
</VdV>
<FileGroup>
<File encoding="binary" format="text/xml">
<ID s:scheme="local">a6b72ff7-4287-4f56-96d8-1da9a89d2316</ID>
<Path>document/1/IT09533610011_173.xml</Path>
<Hash function="SHA-256">6fb942e36b879764cb5cf95a2bffa3585f7f04155447ccc38d38441ed7dd6852</Hash>
<MoreInfo xmlns="http://archismall.com/IDV_EmbeddedMetadata_XSD.xsd">
<EmbeddedMetadata>
<FileNameOriginale>IT09533610011_173.xml</FileNameOriginale>
<IdDocumento s:scheme="local">a6b72ff7-4287-4f56-96d8-1da9a89d2316</IdDocumento>
<ImprontaDocumento function="SHA-256">6fb942e36b879764cb5cf95a2bffa3585f7f04155447ccc38d38441ed7dd6852</ImprontaDocumento>
<OggettoDocumento>Fattura Elettronica Passiva</OggettoDocumento>
<DataChiusura normal="+01">2021-01-07 12:41:38</DataChiusura>
<SoggettoProduttore role="Producer" type="organization">
<Denominazione>GEFIR IMMOBILIARE S.R.L.</Denominazione>
<PartitaIva scheme="VATRegistrationNumber">09533610011</PartitaIva>
<CodiceFiscale scheme="TaxCode">09533610011</CodiceFiscale>
</SoggettoProduttore>
<SoggettoDestinatario role="Addressee" type="person">
<Nome>Mario</Nome>
<Cognome>Infanti</Cognome>
<CodiceFiscale scheme="TaxCode">NFNMRA46R09F463G</CodiceFiscale>
</SoggettoDestinatario>
<SoggettoDestinatario role="Addressee" type="organization">
<Denominazione>REWIND Srl</Denominazione>
<PartitaIva scheme="VATRegistrationNumber"/>
<CodiceFiscale scheme="TaxCode">02406910352</CodiceFiscale>
</SoggettoDestinatario>
<MetadataAggiuntivi name="PeriodoEsercizio"
value="2020" xmlns="http://archismall.com/Metadata.xsd"/>
<MetadataAggiuntivi name="NumeroDocumento"
value="2020047" xmlns="http://archismall.com/Metadata.xsd"/>
<MetadataAggiuntivi name="DataDocumento"
value="2020-12-31" xmlns="http://archismall.com/Metadata.xsd"/>
<MetadataAggiuntivi name="TipoDocumento"
value="Fattura" xmlns="http://archismall.com/Metadata.xsd"/>
<MetadataAggiuntivi name="ProgressivoInvio"
value="173" xmlns="http://archismall.com/Metadata.xsd"/>
<MetadataAggiuntivi name="ResponsabileConservazione"
value="Mario Infanti" xmlns="http://archismall.com/Metadata.xsd"/>
</EmbeddedMetadata>
</MoreInfo>
</File>
</FileGroup>
<Process>
<Agent role="Producer" type="person">
<AgentName>
<NameAndSurname>
<FirstName>Mario</FirstName>
<LastName>Infanti</LastName>
</NameAndSurname>
</AgentName>
<Agent_ID scheme="TaxCode">NFNMRA46R09F463G</Agent_ID>
</Agent>
<Agent role="Producer" type="organization">
<AgentName>
<FormalName>REWIND Srl</FormalName>
</AgentName>
<Agent_ID scheme="TaxCode">02406910352</Agent_ID>
</Agent>
<TimeReference>
<TimeInfo normal="+01">2021-01-07 12:41:38</TimeInfo>
</TimeReference>
</Process>
</SIP>
首先感谢您的热心回复 我有一个软件应用程序,必须通过输入正确的 xpath 查询来设置,以提取稍后将写入数据库的数据 该软件还允许您声明命名空间,但实际上我不知道如何管理此功能,所以如果可能的话我宁愿不必使用它 不幸的是,回答大卫的问题我不知道这个应用程序可以支持什么级别的 Xpath,据我所知,我可以说它采用了以下 link[=11 处的 xpath 测试器支持的相同语法=]
https://codebeautify.org/Xpath-Tester
我尝试在测试器中使用此 XML 文件中建议的字符串,我写
*:更多信息/*:嵌入式元数据/*:原始文件名
但显然不成功,因为我没有返回任何值
也许我写错了查询?
也许您提供的信息可以给我进一步的帮助?
非常感谢
如果它是 XPath 1,那么要么了解如何将前缀(例如 idv
)绑定到您环境中的名称空间 http://archismall.com/IDV_EmbeddedMetadata_XSD.xsd
,然后像在例如//idv:MoreInfo/idv:EmbeddedMetadata/idv:FileNameOriginale
到该命名空间中的 select 元素,或者使用本地名称,例如//*[local-name() = 'MoreInfo']/*[local-name() = 'EmbeddedMetadata']/*[local-name() = 'FileNameOriginale']
.
对于 XPath 2 或 3,始终可以使用名称空间通配符,例如//*:MoreInfo/*:EmbeddedMetadata/*:FileNameOriginale
对于命名空间中的那些元素。在 XPath 3 中,您甚至可以在路径的每个步骤中包含名称空间 URI,例如Q{http://archismall.com/IDV_EmbeddedMetadata_XSD.xsd}EmbeddedMetadata
.
我确认问题已解决,尤其是在我的情况下,这种查询结构对我很有用:
//[local-name() ='MoreInfo']/[local-name()='EmbeddedMetadata']/*[local-name () = 'FileNameOriginale']
使用相同的语法,即使没有指定命名空间,我也可以获得 EmbeddedMetadata 组的更多数据
也可以使用如下表达式读取后续节点:
//*[local-name()='AdditionalMetadata'][@name="DocumentNumber"]/@value
非常感谢大家的宝贵帮助
朋友们玩得开心
再见