powershell - 用于获取部分 XML 节点内容的 Powershell 脚本
问题描述
如何只获取 XML 节点文本的一部分?
我有这段 XML:
<CorpusLink>../Metadata/A_short_autobiography_of_Herculino_Alves.xml</CorpusLink>
<CorpusLink >../Metadata/Wordlist_and_phrases_-_modifiers.xml</CorpusLink>
<CorpusLink >../desano-silva-0151/Metadata/Wordlist_fruits_and_cultural_items.xml</CorpusLink>
<CorpusLink >../desano-silva-0151/Metadata/The_Turtle_and_the_Deer.xml</CorpusLink>
<CorpusLink >../desano-silva-0151/Metadata/Wordlist_and_phrases_parts_of_a_tree.xml</CorpusLink>
<CorpusLink >../desano-silva-0151/Metadata/Wordlist_and_phrases_.xml</CorpusLink>
我只需要在每个文本中提取这段文本:
../Metadata
../desano-silva-0151/Metadata
我有这个代码:
$j = 0
$TrgContent.METATRANSCRIPT.Corpus.CorpusLink | ForEach-Object {
[String]$_.'#text'= % {$alltext[$j] + "xml" $j++}}
但它给了我所有的文字:
../Metadata/A_short_autobiography_of_Herculino_Alves.xml
../desano-silva-0151/Metadata/Wordlist_fruits_and_cultural_items.xml
提前感谢您的帮助。
解决方案
实现你所要求的。我认为我们有两个主要步骤:
- 提取 XML 节点的内容。
- 修剪内容并仅获取您需要的内容。
我对您现有的脚本不是很熟悉,所以我将在这里解释所有两个步骤。第一步对您来说是可选的。
提取 XML 节点的内容
我的示例 XML 文档:
<Corpus>
<CorpusLink>../Metadata/A_short_autobiography_of_Herculino_Alves.xml</CorpusLink>
<CorpusLink>../Metadata/Wordlist_and_phrases_-_modifiers.xml</CorpusLink>
<CorpusLink>../desano-silva-0151/Metadata/Wordlist_fruits_and_cultural_items.xml</CorpusLink>
<CorpusLink>../desano-silva-0151/Metadata/The_Turtle_and_the_Deer.xml</CorpusLink>
<CorpusLink>../desano-silva-0151/Metadata/Wordlist_and_phrases_parts_of_a_tree.xml</CorpusLink>
<CorpusLink>../desano-silva-0151/Metadata/Wordlist_and_phrases_.xml</CorpusLink>
</Corpus>
PS脚本获取内容:
[xml] $XmlDocument = Get-Content D:\Path_To_Your_File
$XmlDocument.Corpus.CorpusLink # Content of the nodes you need
修剪内容
有很多方法,但我想我会使用正则表达式。只需遍历所有内容并运行正则表达式。
$XmlDocument2.Corpus.CorpusLink | Foreach-Object {
if ($_ -match "\.\.\/.*?\/") {
$Matches.Values
}
}
..\
关于正则表达式,它匹配除和之间的行终止符以外的任何字符/
:
\.\. # Escape for 2 dots `..`
\/ # Escapefor slash `/`
.*? # Takes any character except for line terminators in between other listed characters (above and below)
\/ # Escape for slash `/`
我暗示这些字符串的结构是稳定的,因此是正则表达式。
推荐阅读
- c++ - 哈希映射是如何在 C++ 中实现的?
- sql - 如何从子查询更新表
- html - 静态 django css 文件未加载
- r - 在 Shiny 中单击按钮后如何打开新表单
- json - 如何使用 react-i18next 使用 .map() 翻译对象数组中的数据
- mongodb - 是否可以对聚合管道中的每个文档应用不同的聚合投影?
- javascript - Plotly.js multiple subplots not working as expected
- java - 使用@JsonFormat时,带有继承和对象列表的json中的无效对象序列化
- windows - “make(e=2):系统找不到指定的文件”当我运行“make all”命令时
- angular - 一次加载重复的主服务