xml-parsing 相关问题

XML解析器遍历包含XML树的文本文档,并允许使用层次结构中的信息。将此标记用于实现XML解析器的问题,或者通过使用给定语言的现有解析器生成的问题。

使用 Ruby 将 XML 转换为 JSON 并将其保存为单独的文件

我是 Ruby 程序员新手,刚接到新任务,要转换巨大的 XML 并将其保存到单独的 JSON 文件中。例如: abc12345 BCD 我是 Ruby 程序员新手,刚接到新任务,要转换巨大的 XML 并将其保存到单独的 JSON 文件中。例如: <listing> <id>abc12345</id> <name>BCD</name> <address>12 Main St</address> </listing> <listing> <id>a1b2c3d4</id> <name>XYZ</name> <address>14 Main St</address> </listing> <listing> <id>bcde45678</id> <name>MNO</name> <address>14 Broadway</address> </listing> 我想将它保存到单独的文件中,在此示例中使用 id 作为文件名将是 abc12345.json、a1b2c3d4.json 和 bcde45678.json,每个文件都将包含如下内容: { "listing": { "id": "bcde45678", "name": "MNO", "address": "14 Broadway" } } 有人可以帮我解决这个问题吗?对于所有未来的帮助,我真的很感激 我假设您想将列表块作为 JSON 打印到单个文件。如果您有权访问“active_support/core_ext”和“nokogiri”,并且您不太关心 XML 如何转换为 JSON,您可以这样做: require 'active_support/core_ext' require 'nokogiri' xml = Nokogiri::XML(File.read "yourfile") xml.search("//listing").each do |l| filename = l.at_xpath("id").content File.open(filename + '.json', 'w') do |file| file.print Hash.from_xml(l.to_xml).to_json end end 这是使用 XMLSimple(或者不是,这是你的毒药选择)和使用 JSON 的核心模块扩展的好案例: require 'json/add/core' require 'xmlsimple' xml_files = [ '<listing> <id>abc12345</id> <name>BCD</name> <address>12 Main St</address> </listing>', '<listing> <id>a1b2c3d4</id> <name>XYZ</name> <address>14 Main St</address> </listing>', '<listing> <id>bcde45678</id> <name>MNO</name> <address>14 Broadway</address> </listing>' ] xml_files.each do |xml| obj = XmlSimple.xml_in(xml, :ForceArray => false) File.write(obj['id'] + '.json', JSON.pretty_generate(obj)) end 创建三个文件: a1b2c3d4.json: { "id": "a1b2c3d4", "name": "XYZ", "address": "14 Main St" } abc12345.json: { "id": "abc12345", "name": "BCD", "address": "12 Main St" } bcde45678.json: { "id": "bcde45678", "name": "MNO", "address": "14 Broadway" } 我怀疑 XMLSimple 是基于 Perl 的 XMLSimple,它读取 XML 文件并将其转换为本机对象。在这种情况下,它将创建 XML 的散列,允许轻松访问 <id> 标签的内容作为普通散列键。 XMLSimple 在将传入的 XML 解析为对象时具有并且需要很大的灵活性,因此我使用 :ForceArray => false 标志对其进行了微调,这在为散列键创建值时为代码提供了一些宽容度。您需要花一些时间浏览文档以了解它的选项。 JSON.pretty_generate(obj) 创建格式良好的输出。这会增加文件大小,但如果有人必须阅读这些文件,那也没关系。如果不是,请使用 obj.to_json 生成更紧凑的输出,这将减少读取 JSON 文件时的 I/O 时间。 负责编写 XML 的各个块。 你不说“巨大”是什么意思。在我的世界中,巨大的文件可以达到数 GB,甚至达到两位数。对于非常大的 XML 文件,我建议研究使用 Nokogiri::SAX 来使用流处理并生成小的 XML 文件,类似于您的示例 XML。然后你可以使用上面的代码迭代那些。 如果文件不是真的很大,而只是很大,让 Nokogiri 将整个文件解析为 DOM 并遍历<listing> 节点,并将它们输出到文件。您提供的示例 XML 对于真实的 XML 文件无效,因为它缺少包含节点,因此,基于“固定”版本: require 'json/add/core' require 'nokogiri' require 'xmlsimple' xml_files =<<EOT <xml_root> <listing> <id>abc12345</id> <name>BCD</name> <address>12 Main St</address> </listing> <listing> <id>a1b2c3d4</id> <name>XYZ</name> <address>14 Main St</address> </listing> <listing> <id>bcde45678</id> <name>MNO</name> <address>14 Broadway</address> </listing> </xml_root> EOT doc = Nokogiri::XML(xml_files) xml_files = [] doc.search('listing').each do |listing| xml_file = listing.at('id').text + '.xml' xml_files << xml_file File.write(xml_file, listing.to_xml) end xml_files.each do |file| obj = XmlSimple.xml_in(File.read(file), :ForceArray => false) File.write(obj['id'] + '.json', JSON.pretty_generate(obj)) end 运行后,这些文件存在,JSON文件的内容对应对应的XML文件: a1b2c3d4.json a1b2c3d4.xml abc12345.json abc12345.xml bcde45678.json bcde45678.xml 对于简单的 XML,您可以免除 XMLSimple,但对于大型 XML 块,以下内容可能会有点痛苦,但是,至少您可以选择这种痛苦。这是没有 SimpleXML 的方法: require 'json/add/core' require 'nokogiri' xml_files =<<EOT <xml_root> <listing> <id>abc12345</id> <name>BCD</name> <address>12 Main St</address> </listing> <listing> <id>a1b2c3d4</id> <name>XYZ</name> <address>14 Main St</address> </listing> <listing> <id>bcde45678</id> <name>MNO</name> <address>14 Broadway</address> </listing> </xml_root> EOT doc = Nokogiri::XML(xml_files) xml_files = [] doc.search('listing').each do |listing| id, name, address = %w[id name address].map { |node| listing.at(node).content } File.write( id + '.json', { 'id' => id, 'name' => name, 'address' => address }.to_json ) end 尝试将 XML 转换为 JSON 并保存其他 JSON 文件 require "rubygems" require "crack" require "json" folder_path = '/xml_files/local/folder_path' Dir.foreach(folder_path) do |xml_file| next if xml_file == '.' || xml_file == '..' myXML = Crack::XML.parse(File.read("/local/folder_path/#{xml_file}")) myJSON = JSON.pretty_generate(myXML) filename_without = xml_file.sub(".xml", "") File.open("created_json_files_local_path/#{filename_without}.json", 'w') do |f| f.write(myJSON) end end

回答 3 投票 0

exception':“无法解析 QName 'SOAP:',第 1 行,第 7 列

我从 api 得到了这个 xml,但之后我想使用 xpath 获取 xml 属性的值,但在第一步 树 = etree.parse(StringIO(hotel_details_logs)) 我有异常...

回答 0 投票 0

为 python tkinter 解析 nmap xml 输出

我是一名学生,我有点迷路,我有一个学校项目。该项目使用 Linux 命令行, 我正在使用 nmap 和 python 这是我项目的第一部分: 这个想法是创造...

回答 1 投票 0

INFORMATICA POWERCENTER:映射问题和 XML 输出

我是Powercenter的新手,想把一个关系输出结果转换成一个xml文件。 我有一个带有 xml 结构的 xsd 文件。 当我将其导入 Designer 时,PWC 会自动创建

回答 0 投票 0

在 Python 上使用 BeautifulSoup 从 XML 文件中提取内容

我有一个这样的 XML 结构: 我有这样的 XML 结构: <Trainers> <Trainer name="VisitorID" value=" NPRoiuKL213kiolkm2231"/> <Trainer name="VisitorNumber" value="BR-76594823-009922"/> <Trainer name="ServerIndex" value="213122"/> <Trainer name="VisitorPolicyID" value="ETR1234123"/> </Trainers> 我想根据培训师姓名提取值。所以基本上是这样的: NPRoiuKL213kiolkm2231来自VisitorID,BR-76594823-009922来自VisitorNumber等等.. 我也想看看我能不能提取<Trainers>如果可以的话 我可以在 Pandas 上使用“read_xml”来执行此操作并获得一张表,但我想单独获取这些值,以便我可以验证从 Pandas 创建的表。 这是我尝试过的: soup = BeautifulSoup(Trainee.xml, 'xml') soup.find_all({"Trainer name": "VisitorID"}) soup.find_all({"Trainer name": "VisitorNumber"}) soup.find_all({"Trainer name": "ServerIndex"}) soup.find_all({"Trainer name": "VisitorPolicyID"}) 我预计这会起作用,但这些给了我空数组[] 我在这里缺少什么吗?当我用 read_xml 通过 Pandas 解析它时,我得到了一个合适的表,但单独我得到一个空数组。 任何帮助将不胜感激! 非常感谢! 如果我对你的理解正确,你想得到所有<Trainers>和所有name/value对: from bs4 import BeautifulSoup xml_doc = """\ <Trainers> <Trainer name="VisitorID" value=" NPRoiuKL213kiolkm2231"/> <Trainer name="VisitorNumber" value="BR-76594823-009922"/> <Trainer name="ServerIndex" value="213122"/> <Trainer name="VisitorPolicyID" value="ETR1234123"/> </Trainers>""" soup = BeautifulSoup(xml_doc, "xml") for item in soup.select("Trainers"): for trainer in item.select("Trainer"): print(trainer["name"], trainer["value"]) 印花: VisitorID NPRoiuKL213kiolkm2231 VisitorNumber BR-76594823-009922 ServerIndex 213122 VisitorPolicyID ETR1234123 如果你想从数据构造数据框,你可以使用这个例子: df = pd.DataFrame( [ {t["name"]: t["value"] for t in item.select("Trainer")} for item in soup.select("Trainers") ] ) print(df) 印花: VisitorID VisitorNumber ServerIndex VisitorPolicyID 0 NPRoiuKL213kiolkm2231 BR-76594823-009922 213122 ETR1234123

回答 1 投票 0

如果 gitlab 中的测试用例失败,如何停止管道?

我有这个 yml 文件 测试1: 阶段:测试 # 规则: - 什么时候: 如果:$TEST_ENABLE == "ON" 脚本: - ....... 运行测试的逻辑...................... - C: pt.exe --tpt_output=&...

回答 0 投票 0

Amazon Submit Feed api 错误

我正在调用亚马逊 MWS 服务来更新商品数量,但是当我调用“GetGetFeedSubmissionResult”以了解状态时,它返回了错误。我不知道这里有什么问题。 子...

回答 1 投票 0

我使用 postman,如何从 SOAP API 响应中获取特定的字符串?

这里是邮递员控制台报告,我怎么断言版本号? 我使用这段代码: pm.test("检查版本", function() { var jsonObject = xml2Json(responseBody); ...

回答 0 投票 0

以表格格式提取 XML 数据

我有一个 xml 文件,我想从中提取数据。最终,我需要的是一个显示节点名称(即 NODE36 和 NODE44)以及表中信息的表格(参见所需的

回答 3 投票 0

使用 SOAP 信封和无效的 xsd 地址反序列化 XML 文件

我想反序列化这种具有 SOAP 信封和标头中不再存在的无效 .xsd 地址的 XML 文件(finvoiceack.xsd)。想要将节点获取到数据集或我...

回答 1 投票 0

如何从xml数据中提取数据并保存在excel文件中

我有一个 .xml 文件如下: ...

回答 1 投票 0

C# 从 xml 反序列化日期时间

我必须反序列化带有日期的 xml,如下所示: 2015/10/16 00:00:00.000000000 我的班级包含这个领域: [XmlAttribute("日期")] public DateTime StartDate { 得到...

回答 1 投票 0

根据小时数创建日期间隔

我正在尝试根据小时数创建日期间隔。已知变量是从 XML 文件中提取的开始日期、结束日期和小时位置。这只是一个例子,因为时间...

回答 1 投票 0

如果缺少,则在 xml 文档中插入一行字符串

团队, 我怎样才能摆脱正在执行的插入中的“t”?还有更好的方法吗? 我的用例正在生成一个 bazel 覆盖率报告,该报告是 test.dat,正在转换为...

回答 0 投票 0

XML 不能用 soap-env 解析,在 PHP 中有自定义标签

我在用 PHP 解析 XML 响应时遇到错误 当我从 CURL 请求调用时,我有以下 XML 响应 我在用 PHP 解析 XML 响应时遇到错误 当我从 CURL 请求调用时,我有以下 XML 响应 <soap-env:Header> <eb:MessageHeader xmlns:eb="http://www.ebxml.org/namespaces/messageHeader" eb:version="1.0" soap-env:mustUnderstand="1"> <eb:From> <eb:PartyId eb:type="URI">Sabre_API</eb:PartyId> </eb:From> <eb:To> <eb:PartyId eb:type="URI">Agency</eb:PartyId> </eb:To> <eb:ConversationId>2021.01.DevStudio</eb:ConversationId> <eb:Service eb:type="sabreXML">Session</eb:Service> <eb:Action>TokenCreateRS</eb:Action> <eb:MessageData> <eb:MessageId>1913771794839350290</eb:MessageId> <eb:Timestamp>2023-02-23T22:04:43</eb:Timestamp> </eb:MessageData> </eb:MessageHeader> <wsse:Security xmlns:wsse="http://schemas.xmlsoap.org/ws/2002/12/secext"> <wsse:BinarySecurityToken valueType="String" EncodingType="wsse:Base64Binary">T1RLAQLASo74A7olKG7QnepeFqs19UHX+0Cds9QiDZoYfu677xC3Vkr9a+OcQhutjPL4atVMAADQRtHIXdehGg/0OVuPdia/0cM233jFDvyJJHgJHC3o8gV2ssS63b4Y0lgCG59SiG4tmEcqAXcYAMlnq+wJ4TfsOIDFwYdP+D0peSEFBM/m3EyOUqc4idJ+vO4S7xENCeQ7UX4YVKjVLJs788omPDbSIRNo85KQ5QxRprldV0jucJpAtbNfs1DrMHFqNIPyg0CpVpgXILkFx0azkcAuvmbHMHLqqO13WJEOhsG0KDBhBhRn8CwoCgD9foXL24W6yGu8Ecm0Fzvb/MuAjuYm9s48yg**</wsse:BinarySecurityToken> </wsse:Security> </soap-env:Header> <soap-env:Body> <sws:TokenCreateRS xmlns:sws="http://webservices.sabre.com" Version="1.0.0"> <sws:Success/> </sws:TokenCreateRS> </soap-env:Body> </soap-env:Envelope> 为了解析上面的 XML,我最初尝试使用 simplexml_load_String 但它给出了一个空响应。 然后我使用以下代码尝试了DOM方法,这里考虑$response->Data是上面的XML。 $dom = new DOMDocument; $dom->preserveWhiteSpace = false; $dom->loadXML($response->Data); $dom->formatOutput = true; $XMLContent = $dom->saveXML(); 它再次给我以下输出: <!--?xml version="1.0" encoding="UTF-8"?--> <soap-env:envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/"> <soap-env:header> <eb:messageheader xmlns:eb="http://www.ebxml.org/namespaces/messageHeader" eb:version="1.0" soap-env:mustunderstand="1"> <eb:from> <eb:partyid eb:type="URI">Sabre_API</eb:partyid> </eb:from> <eb:to> <eb:partyid eb:type="URI">Agency</eb:partyid> </eb:to> <eb:conversationid>2021.01.DevStudio</eb:conversationid> <eb:service eb:type="sabreXML">Session</eb:service> <eb:action>TokenCreateRS</eb:action> <eb:messagedata> <eb:messageid>1002038859236010450</eb:messageid> <eb:timestamp>2023-02-23T23:52:03</eb:timestamp> </eb:messagedata> </eb:messageheader> <wsse:security xmlns:wsse="http://schemas.xmlsoap.org/ws/2002/12/secext"> <wsse:binarysecuritytoken valuetype="String" encodingtype="wsse:Base64Binary">T1RLAQJZqih4+TYQmYCcdj42lcej5nckNWdo6WNb8edNl3xNtxAkqmu2YKjKki1OKQ7B3HK3AADQCGiRWrlzFPM0KB4foAOsSF+I+5eXE32uQ23LLd+hOduY2BCJYqPw7CvwCJ/LfNjy3P+QyvClvu6ysctC3a0GjmixDPDqCIckcXPb+XDFyYhR5G5QzQjch/Eax25koLnNvfN8rlvjNq+ENJmaV17wP43GLo1pzd19d9HGMn1VgjrJiVGWAb1ezyeiFNAd1VuBD2lAmdlo4jvZJzAS/fklZvwNFbKME64YpaFRptoLz0FKmz47y1TVYFtV6TZxbKirP3PDms0aGlItbJ4apPSB2Q**</wsse:binarysecuritytoken> </wsse:security> </soap-env:header> <soap-env:body> <sws:tokencreaters xmlns:sws="http://webservices.sabre.com" version="1.0.0"> <sws:success> </sws:success></sws:tokencreaters> </soap-env:body> </soap-env:envelope> 所以我计划从NODE获取数据,如下所示 $XMLContent->getElementsByTagName('soap-env:header')->item(0)->nodeValue); 但是它没有给我一个节点值,而是开始给我和错误。 我只想获取节点中的数据wsse:binarysecuritytoken 有没有人经历过这样的事情? 你能帮我吗?? 更新 也尝试关注,但仍然没有帮助 $domDocument = new DOMDocument(); $domDocument->loadXML($XMLContent); $carriers=array(); $results=$domDocument->getElementsByTagName("wsse:Security"); foreach($results as $result) { foreach($result->childNodes as $node) { if($node instanceof DOMElement) { array_push($carriers, $node->textContent); } } } var_dump($carriers); 好吧,在花了几个小时之后,我终于明白了! 我不得不根据如下标签名称进行修改,在大多数情况下,我不得不使用 soap-env 而不是 SOAP. $dom = new DOMDocument; $dom->preserveWhiteSpace = false; $dom->loadXML($response->Data); $dom->formatOutput = true; $XMLContent = $dom->saveXML(); $xml = simplexml_load_String($XMLContent, null, null, 'soap-env', true); if(!$xml) trigger_error("Encoding Error!", E_USER_ERROR); $Results = $xml->children('soap-env',true); foreach($Results->children('soap-env',true) as $fault){ if(strcmp($fault->getName(),'Fault') == 0){ trigger_error("Error occurred request/response processing!", E_USER_ERROR); } } foreach($Results->children('wsse',true) as $nodes){ if(strcmp($nodes->getName(),'Security') == 0){ foreach($nodes->children('wsse',true) as $securityNodes){ if(strcmp($securityNodes->getName(),'BinarySecurityToken') == 0){ $tokenParsed = (string)$securityNodes; } } } } 这就是SOAP,一种使用XML语法的对象序列化格式。最佳解决方案是使用 SOAP 库。 PHP 对此有ext/soap。使用 XML 库会低一个级别。 XML 使用命名空间。名称空间是使用唯一的 URI 指定的。为了可读性/可维护性,XML 为 URI 定义了别名,并将它们用作节点名称的前缀。但是以下3个例子都应该读作{http://schemas.xmlsoap.org/soap/envelope/}envelope: <soap-env:envelope xmlns::soap-env="http://schemas.xmlsoap.org/soap/envelope/"/> <soap:envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"/> <envelope xmlns="http://schemas.xmlsoap.org/soap/envelope/"/> 命名空间可以在任何元素节点上定义,因此它们甚至可以在单个文档中更改。这意味着您的代码不应该依赖于文档中的别名/前缀,而是名称空间 URI。 我强烈建议为使用的命名空间定义一个数组变量/常量。然后你可以使用 Xpath 和命名空间感知 DOM 方法(后缀NS)。 // used namespaces, the keys do NOT need to match the prefixes in the XML. $xmlns = [ 'soap' => 'http://schemas.xmlsoap.org/soap/envelope/', 'eb' => 'http://www.ebxml.org/namespaces/messageHeader', 'sec' => 'http://schemas.xmlsoap.org/ws/2002/12/secext' ]; $document = new DOMDocument(); $document->loadXML(getSoapXmlString()); $xpath = new DOMXpath($document); // register your aliases for the namespaces foreach ($xmlns as $alias => $uri) { $xpath->registerNamespace($alias, $uri); } $token = $xpath->evaluate( 'string(//sec:security/sec:binarysecuritytoken)' ); var_dump($token); DOMXpath::evaluate() 允许 Xpath 表达式返回节点列表和标量值。如果将节点列表(由位置路径指定)转换为字符串,它将返回第一个节点的文本内容或空字符串。

回答 2 投票 0

将单个 XML 解析为 pandas Dataframe

我有一个单独的xml字符串如下(我在这里展示了一个示例。它实际上由10K+这样的元素组成,但所有元素都包含在myData标签中) myxml = 我有一个单独的xml字符串如下(我在这里展示了一个示例。它实际上由10K+这样的元素组成,但所有元素都包含在myData标签中) myxml = <myData> <x1="A" name="P1" supp="TU01" type="CA" date="200607" proc="Y" iden="1" /> <x1="B" name="Q1" supp="TU01" type="CA" date="200609" proc="N" iden="5" /> <x1="B" name="R1" supp="UY7" type="CA" date="200609" proc="N" iden="12" /> </myData> 我的目标是解析这个 xml 字符串,并将其放入一个表格形式的 pandas 数据框,例如具有 x1、name、supp、type、date、proc 和 iden 等列的结构。 所以我的数据框(输出)应该看起来像 df = x1 name supp type date proc iden A P1 TU01 CA 200607 Y 1 B Q1 TU01 CA 200609 N 5 B R1 UY7 CA 200609 N 12 作为第一步,我尝试执行以下操作,但它不起作用,因为除了来自 3 个元素的 x1 之外我没有得到任何东西: from xml.etree import ElementTree as ET root = ET.fromstring(myxml) print(root) for child in root.iter('*'): print(child.tag) 这个本身并没有给我我所期望的。后来我想创建一个字典,我想从中创建熊猫数据框: xmlDict = {} for parent in root: child = parent.getchildren() xmlDict[child[0].text] = child[1].text 在这些方面的任何帮助将不胜感激。 首先要注意的是您的原始 XML 格式不正确。 每个标签都应该包含一个tag name,而myData的后代有 只有属性. 使用以下 XML 和一些标签名称,例如行: <myData> <row x1="A" name="P1" supp="TU01" type="CA" date="200607" proc="Y" iden="1" /> <row x1="B" name="Q1" supp="TU01" type="CA" date="200609" proc="N" iden="5" /> <row x1="B" name="R1" supp="UY7" type="CA" date="200609" proc="N" iden="12" /> </myData> 然后按照您的代码读取源字符串: root = ET.fromstring(myxml) 要创建 DataFrame,请运行: df = pd.DataFrame([ child.attrib for child in root.iter('row') ]) 结果是: x1 name supp type date proc iden 0 A P1 TU01 CA 200607 Y 1 1 B Q1 TU01 CA 200609 N 5 2 B R1 UY7 CA 200609 N 12 (最左边的列是索引)。

回答 1 投票 0

如何使用 Apache POI 解析和打印项目符号列表?

我正在尝试提取 Java 项目中的整个 word 文档,逐段进行并将 XWPFParagraphs 打印回另一个 word 文件。 除了项目符号列表,我能够完成我的任务

回答 0 投票 0

无法解析 xml - 错误:第一个标记前的非空白。行:0 列:1 字符:4

我正在写一个简单的原子包。当我发送请求时,服务器会做出 xml 响应,因此我尝试使用 xml2js 对其进行解析。但是出现错误: 错误:第一个标记前没有空格。线:0

回答 6 投票 0

本地日期时间解析 2023-02-22T09:47:00.5371934+03:00 和 2023-02-22T09:47:00.537

如何将此代码解析为 localDateTime? 我有 2 个区域给我 localDateTime,其中一个是 2023-02-22T09:47:00.5371934+03:00,另一个是 2023-02-22T09:47:00.537,响应如下:

回答 1 投票 0

在 XML 中下载具有相同名称的图像

我正在尝试下载产品图片或获取 XML 格式的文件路径。我有同名的麻烦。谢谢。 文件 - - AXX-655 我正在尝试下载产品图片或获取 XML 格式的文件路径。我有同名的麻烦。谢谢。 XML 文件 -<products> -<product> <product_code>AXX-655</product_code> <product_name>Samsung Led TV</product_name> -<Images> <Image>https://max.cloud/37233/products-77d4.jpg</Image> <Image>https://max.cloud/37233/products-254789.jpg</Image> <Image>https://max.cloud/37233/products-f010.jpg</Image> <Image>https://max.cloud/37233/products-8004.jpg</Image> </Images> -</product> -<product> <product_code>ACH-645</product_code> <product_name>LG Led TV</product_name> -<Images> <Image>https://max.cloud/37233/products-895777.jpg</Image> <Image>https://max.cloud/37233/products-3652.jpg</Image> <Image>https://max.cloud/37233/products-k0120.jpg</Image> </Images> -</product> -</products> 我正在尝试通过产品 ID 或产品名称下载产品图片 PHP文件 $xml = simplexml_load_file($xmllocalurl) or die("Error: Cannot create object"); foreach ($xml->children() ->children() as $child) { $name = $child->product_name; $url = $child->Images->Image; $img = 'imgfiles/'.$name.'.jpg'; $url = $child->product_name; file_put_contents($img, file_get_contents($url)); 由于您正在处理 xml,您最好使用 xpath 来提取我认为是您的目标数据的内容。 以下只是展示数据;然后你可以按照你认为合适的方式保存它: $items = $xml->xpath('//product'); foreach ($items as $item) { $name = $item->xpath('./product_name')[0]; $code = $item->xpath('./product_code')[0]; $images = $item->xpath('.//Image/text()'); echo $name," " ,$code," " ; foreach ($images as $image) { echo $image , " "; } echo "\r\n"; }; 输出(基于您的示例 xml): Samsung Led TV AXX-655 https://max.cloud/37233/products-77d4.jpg https://max.cloud/37233/products-254789.jpg https://max.cloud/37233/products-f010.jpg https://max.cloud/37233/products-8004.jpg LG Led TV ACH-645 https://max.cloud/37233/products-895777.jpg https://max.cloud/37233/products-3652.jpg https://max.cloud/37233/products-k0120.jpg

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.