尝试从文件中提取一些字符串。这是文件中文本的简化示例:
<modelName>thing1</modelName><gtin>123456789</gtin><description>blah blah blah</description>
<modelName>thing2</modelName><gtin>789456123</gtin><description>blah blah blah</description>
<modelName>thing3</modelName><gtin>456789123</gtin><description>blah blah blah</description>
我想提取每一行的这一部分:<gtin>xxxxxxx</gtin>
并将它们放入另一个文件中。
我不想要整条线,只需要gtin。
这是我尝试的内容:
Get-Content -Path C:\firstFile.xml -Readcount 1000 | foreach { $_ -match "<gtin1>*</gtin1>" } | out-file C:\gtins.txt
但你可能猜测它没有用。
非常感谢任何帮助。我觉得这很容易让人感到尴尬。
谢谢!
答案 0 :(得分:1)
使用实际的XML解析器从XML文件中提取数据。
[xml]$xml = Get-Content 'C:\firstfile.xml'
$xml.SelectNodes('//gtin') | Select-Object -Expand '#text'
答案 1 :(得分:0)
(编辑> Ansgar Wiechers是正确的,你不应该使用正则表达式解析XML,并且正确的XML解析是首选。)
您可以使用Select-String
和正则表达式提取子字符串。例如:
Get-Content "C:\firstfile.xml" | Select-String '(<gtin>.+</gtin>)' | ForEach-Object {
$_.Matches[0].Groups[1].Value
}
如果您只想要标记之间的值,请移动(
和)
以仅围绕表达式的.+
部分。
有关正则表达式的更多信息:
PS C:\> help about_Regular_Expressions