XML解析器遍历包含XML树的文本文档,并允许使用层次结构中的信息。将此标记用于实现XML解析器的问题,或者通过使用给定语言的现有解析器生成的问题。
您好, 我有这个 XMLFile,我尝试获取有多少个 SaveDrive、SaveFolder 和 Save File 元素。 你好, 我有这个 XMLFile,我尝试获取有多少个 SaveDrive、SaveFolder 和 Save File 元素。 <?xml version="1.0"?> <CreationFile transactionDate="18-AUG-2024 09:52:18" userName="Diana" Title="A-12345"> <function name="SaveDrive" FuncType="Sync"> <Title>A-12345</Title> <Facility>MMLD</Facility> <Area>COLOMBIA</Area> <Version>V1</Version> </function> <function name="SaveFolder" FuncType="Sync"> <Folder>H1</Folder> <Title>A-12345</Title> <FolderType>Docs</FolderType> </function> <function name="SaveFile" FuncType="Sync"> <Title>A-12345</Title> <Folder>H1</Folder> <File>Text1</File> </function> <function name="SaveFile" FuncType="Sync"> <Title>A-12345</Title> <Folder>H1</Folder> <File>Text2</File> </function> </CreationFile> 我尝试根据函数获取项目数,对于这个例子我想要: 保存驱动器:1 保存文件夹:1 保存文件:2 然后首先加载xml文件 [xml]$ConfigXML = Get-Content -Path $xmlFileNamePath $dummy = $ConfigXML.OuterXml $firstline = '<?xml version="' + '1.0"?>' $dummy = $dummy.Replace($firstline, "") $ConfigXML = New-Object -TypeName System.Xml.XmlDocument $dummy = $WTUConfigXML.LoadXml($dummy) 并尝试使用此页面上已有的代码来获取元素。 [scriptblock]$DriveFilter = {$_.name -eq "SaveDrive"} [scriptblock]$FolderFilter = {$_.name -eq "SaveFolder"} [scriptblock]$FileFilter = {$_.name -eq "SaveFile"} $found_elements = $ConfigXML.selectnodes("//CreationFile/function") | Where-Object ($DriveFilter) $total += $found_elements.Count Write-Host $found_elements.count.ToString("n0") elements $found_elements = $ConfigXML.selectnodes("//CreationFile/function") | Where-Object ($FolderFilter) $total += $found_elements.Count Write-Host $found_elements.count.ToString("n0") elements $found_elements = $ConfigXML.selectnodes("//CreationFile/function") | Where-Object ($FileFilter) $total += $found_elements.Count Write-Host $found_elements.count.ToString("n0") elements **那么我的问题是什么:** 对于 DriveFilter 按预期工作并返回 2,但对于 $DriveFilter 和 $FolderFilter,它们只有 1 元素,它给了我这个错误。如果我添加更多 SvaeDrive 和 SaveFolder 它就可以工作,我的意思是在 2 个元素可以工作但 1 个元素不能工作之后。 **您不能对空值表达式调用方法。 在 E:\CygNet\Corporate\PDO\Scripts\WellTest\NibrasWTIntegration.ps1:90 字符:2 写入主机 $found_elements.count.ToString("n0") 元素 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ 类别信息:无效操作:(:) [],运行时异常 FullQualifiedErrorId:InvokeMethodOnNull** 如何解决这个问题?我不想使用下面的 foreach 循环,它可以工作,但我不喜欢 $totalDrive = 0; $totalFolder = 0; $totalFile = 0; foreach ($item in ($ConfigXML.SelectNodes("//CreationFile/function") | Where-Object $DriveFilter)) { $totalDrive += 1; } foreach ($item in ($ConfigXML.SelectNodes("//CreationFile/function") | Where-Object $FolderFilter)) { $totalFolder += 1; } foreach ($item in ($ConfigXML.SelectNodes("//CreationFile/function") | Where-Object $FileFilter)) { $totalFile += 1; } Write-Host WTU $totalWTU with $totalHeader and $totalPort ports 谢谢, tl;博士 mclayton在评论中提供了关键指针: 您在 Windows PowerShell 中看到一个 bug(见下文),此问题已在 PowerShell (Core) 7 中修复。 解决方法是将管道包含在@(...)(数组子表达式运算符)中,以确保它们的输出成为数组,您可以访问其.Count属性;例如: $found_elements = @($ConfigXML.SelectNodes("//CreationFile/function") | Where-Object $DriveFilter) 背景资料: 自 v3 起,PowerShell 统一处理标量和类似数组的集合,通过提供 内在属性,允许您像对待数组一样对待标量(单个对象),即通过公开 .Count属性(和.Length别名)报告1(例如尝试(Get-Date).Count),并通过允许索引,用[0]和[-1]报告对象本身(例如,(Get-Date)[0])与 Get-Date 相同) - 除非标量的类型本身实现了此类成员。 当前的错误是,在 Windows PowerShell [System.Xml.XmlNode] 实例中,not 意外地具有内在 .Count(和 .Length)属性,即使它们应该具有。 重要的原因是,尽管 SelectNodes() 方法始终返回类型为 System.Xml.XmlNodeList 的(n 个类似数组的)节点list,其中 确实 具有 .Count 属性, PowerShell 的自动枚举行为将其元素逐一流式传输到管道;如果 Where-Object 调用过滤器仅在这些元素中的 one 中进行过滤,则捕获变量中的管道输出将捕获该元素 as-is;只有两个或更多输出对象(必要时)被捕获在数组中。 因此,如果您的管道仅输出 one 节点,则由于缺乏内在 .Count 属性,您尝试在 XmlNode 实例上调用 $null 会悄悄地计算为 .Count。 随后尝试在此 $null 值 ($found_elements.count.ToString("n0")) 上调用 方法 因此会导致您看到的错误。 如前所述,确保管道输出始终收集在数组中,即使只有一个(或没有)输出对象,使用@(...)可以解决此问题。
模块jdk.xml.dom和xercesImpl导出包org.w3c.dom.html到模块io.cucumber.core.gherkin.messages'
在我的一个项目中,我使用了以下依赖项: 练习 练习Impl 2.12.2 在我的一个项目中,我使用了以下依赖项: <dependency> <groupId>xerces</groupId> <artifactId>xercesImpl</artifactId> <version>2.12.2</version> <exclusions> <exclusion> <groupId>xml-apis</groupId> <artifactId>xml-apis</artifactId> </exclusion> </exclusions> </dependency> 具有以下module-info.java: open module de.powerstat.fb.mini { exports de.powerstat.fb.mini; requires transitive java.xml; requires org.apache.logging.log4j; requires transitive de.powerstat.validation; requires transitive org.apache.httpcomponents.httpclient; requires org.apache.httpcomponents.httpcore; requires org.apache.commons.codec; requires com.github.spotbugs.annotations; requires org.junit.jupiter.api; requires org.junit.jupiter.params; requires org.junit.platform.launcher; requires org.junit.platform.suite.api; } 我收到以下错误消息: [INFO] --- surefire:3.5.0:test (default-test) @ miniapi --- [INFO] Using auto detected provider org.apache.maven.surefire.junitplatform.JUnitPlatformProvider [INFO] ------------------------------------------------------- [INFO] T E S T S [INFO] ------------------------------------------------------- [ERROR] Error occurred during initialization of boot layer [INFO] Results: [INFO] Tests run: 0, Failures: 0, Errors: 0, Skipped: 0 [WARNING] Corrupted channel by directly writing to native stream in forked JVM 1. See FAQ web page and the dump file C:\MyProject\target\surefire-reports\2024-09-28T15-18-12_539-jvmRun1.dumpstream 在上述文件中包含以下消息: Stream 'Error occurred during initialization of boot layer'. Stream 'java.lang.module.ResolutionException: Modules jdk.xml.dom and xercesImpl export package org.w3c.dom.html to module io.cucumber.core.gherkin.messages'. 在查看我的依赖项时,我发现: jdk.xml.dom: org.w3c.dom.css org.w3c.dom.html org.w3c.dom.stylesheets org.w3c.dom.xpath 以及: xercesImpl-2.12.2.jar: org.apache.* org.w3c.dom.html 这意味着我们这里有一个分割包,这在java模块系统中是不允许的。 有解决方法的想法吗?或者 xerces 可能无法与 java 模块系统一起使用? Saxon 会成为与 java 模块系统一起使用的替代品吗?或者还有其他解决办法吗? 感谢 Michael Kay 的提示,在使用较新的 Java 版本(如 17)时,似乎足以删除 xerces 依赖项: <!-- <dependency> <groupId>xerces</groupId> <artifactId>xercesImpl</artifactId> <version>2.12.2</version> <exclusions> <exclusion> <groupId>xml-apis</groupId> <artifactId>xml-apis</artifactId> </exclusion> </exclusions> </dependency> -->
我正在尝试读取和解析 XML 文件并将其转换为数据框对象,但每次尝试都在列表级别返回“字符[0]”,预计返回字符串或数字...
我有一个小问题,在阅读了微软文档后我仍然无法解决它。 我正在使用 Azure Synapse Analytics,并且有一列存储在 XML 字符串中,其名称为 &
我想将 XML 文件转换为 CSV。但是,我不断收到错误 AttributeError: 'NoneType' object has no attribute 'integer'。 xmlparse = Xet.parse('Apple Music Library.xml') 根= xmlpa...
我想在Nodejs中解析XML数据,但总是出现错误: 第一个标签之前不能有空格。 出现此错误的原因是,我要解析的文件是 UTF-8 编码的并且具有 BOM。 他...
xml.LoadData - 根级别的数据无效。 1 号线,位置 1
我正在尝试解析 WiX 安装程序中的一些 XML。 XML 将是从 Web 服务器返回的所有错误的对象。我使用以下代码在问题标题中收到错误: Xml文档...
我正在尝试确定将从 Web 服务调用获得的 XML 响应解析为 Java 对象的最佳方法。 使用 JAXB 似乎是最简单的方法,但我得到的每个示例都需要......
有没有办法从节点的某个实例获取 XPath 位置谓词? 所以我搜索了一个position(Node)函数,它返回DOM树中节点的位置。 示例:页面...
我正在尝试使用Python 解析XML 文件。由于 XML 的大小,我想使用 Pull 解析器。我找到了这个。 我的代码开头为 doc = pulldom.parse("myfile.xml") 对于事件,节点在...
我正在尝试从 docx 文件中提取文本,我从文档中获取折叠文本,例如首先提取底部或随机文本框中存在的文本,然后提取来自
我似乎无法使用 XSD 和 XML 数据绑定向导访问在线 XML 文件内容。我需要每天更新一个数据库表,其中包含来自在线 XM 的所有请求的货币...
我有一个第三方应用程序正在解析 XML 文件中的魔术字符串,即使它应该将它们视为字符文字。 例如,假设我的 XML 包含以下内容
Python:如何将 XML 文件解析为缺少子项的 DataFrame?
我正在尝试解析 SimpleXML 文件并转换为数据帧。我的 xml 中有大约 3000 个条目,并且一些条目中缺少我需要的子项属性之一。所以数据框...
我将代码放入 XML 验证网站,它给出了以下错误: 第 8 行:4 文档中根元素后面的标记必须格式正确。 有问题的线路...
我需要制作一个Python脚本来获取相机配置并检查OSD中写入的内容。我编写了直接从它们下载 XML 文件的代码,然后对其进行解析,以便
有没有办法使用Apache POI从word文档中提取文本框的位置和尺寸
我正在尝试使用 Apache POI 提取有关 Word 文档中文本框的位置和尺寸的信息。在 Aspose.Words 中有处理文本框和其他内容的方法和类
删除<?xml version="1.0" tag from XML in php
我有一个返回 xml 的函数,但返回的 xml 有两个 标签 我无法修复该呼叫以通过一次呼叫返回它。我尝试使用 SimpleXMLElement 所以当我加载时
是否可以从文章的 .nxml 文件中提取图形的内联提及? 我可以使用 pubmed_parser 提取图形和标题,是否有任何库可用于