Board logo

标题: [问题求助] 请求PowerShell: 根据XML文件结点获取对应文件夹内的html文件内容 [打印本页]

作者: 5i365    时间: 2022-3-15 09:24     标题: 请求PowerShell: 根据XML文件结点获取对应文件夹内的html文件内容

下面的XML文件中的结点结构  和  文件夹内的文件结构是相互对应的!

我想根据XML文件中的某个结点的url值获取对应文件夹内的html文件内容,随后将内容写入到XML对应节点的位置【如果这个位置有值则替换掉】,具体描述如下:

例如: 下面二楼XML文件中的红色字部分就是存在url值的结点,这个url值的文件夹内有一个html文件,

获取这个文件的内容,然后将内容插入到该结点上方的 NotesGroup\NotesXhtmlData 结点中, 蓝色字部分就是插入后的示例, 因为贴子字数限制只标记了一个蓝色区域

要遍历所有存在url值的结点,并插入内容, 我通过下面的方法取到了结点值, 但是编程水平水限, 求高手引路, 非常感谢!


示例文件: https://send.cm/d/9RzN

用下面的方法可以查询如下两个结点路径:
$xmldata = [xml](Get-Content Document.xml -enc UTF8)
#顶级\一级1
$xmldata.Map.OneTopic.Topic.SubTopics.Topic[0].Hyperlink
#顶级\一级2
$xmldata.Map.OneTopic.Topic.SubTopics.Topic[1].Hyperlink

xml结点很有规律,录了一个gif演示



_____________________________________________________________________________
文件夹结构:
C:\USERS\ADMINISTRATOR\DESKTOP\顶级
├─一级1
│  │  A.html
│  │
│  └─二级1
│      │  A.html
│      │
│      └─三级2
│              A.html

└─一级2
    │  A.html
    │
    └─二级1
        │  A.html
        │
        └─三级1
                A.html
作者: 5i365    时间: 2022-3-15 09:25

本帖最后由 5i365 于 2022-3-15 10:43 编辑

XML文件内容:

<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<ap:Map Dirty="0000000000000001" Gen="0000000000000000" xmlns:ap="www.w3.org" xmlns:cor="www.w3.org" xmlns:pri="www.w3.org" xmlns:xsi="www.w3.org" >
    <cor:Custom Index="0" Dirty="0000000000000001" />
        <ap:OneTopic>
            <ap:Topic Dirty="0000000000000001"  Gen="0000000000000000">
                <cor:Custom Index="0" Dirty="0000000000000001" />
                    <ap:SubTopics>
                        <ap:Topic Dirty="0000000000000001"  Gen="0000000000000000">
                            <ap:SubTopics>
                                <ap:Topic Dirty="0000000000000001"  Gen="0000000000000000">
                                    <ap:SubTopics>
                                        <ap:Topic Dirty="0000000000000001"  Gen="0000000000000000">
                                            <ap:TopicViewGroup ViewIndex="0">
                                                <ap:Collapsed Collapsed="false" Dirty="0000000000000000"/>
                                            </ap:TopicViewGroup>
                                            <ap:Text Dirty="0000000000000001" PlainText="三级2" ReadOnly="false">
                                                <ap:Font/>
                                            </ap:Text>
                                            <ap:NotesGroup>
                                                <ap:NotesXhtmlData Dirty="0000000000000001" PreviewPlainText="我是 C:\Users\Administrator\Desktop\顶级\一级1\二级1\三级2 下的html文件">
                                                    <html
                                                        xmlns="http://www.w3.org/1999/xhtml">
                                                        <p>我是 C:\Users\Administrator\Desktop\顶级\一级1\二级1\三级2 下的html文件</p>
                                                    </html>

                                                </ap:NotesXhtmlData>
                                            </ap:NotesGroup>
                                            <ap:Hyperlink  Url="C:\Users\Administrator\Desktop\顶级\一级1\二级1\三级2" />
                                        </ap:Topic>
                                    </ap:SubTopics>
                                    <ap:TopicViewGroup ViewIndex="0">
                                        <ap:Collapsed Collapsed="false" Dirty="0000000000000000"/>
                                    </ap:TopicViewGroup>
                                    <ap:Text Dirty="0000000000000001" PlainText="二级1" ReadOnly="false">
                                        <ap:Font/>
                                    </ap:Text>
                                    <ap:NotesGroup>
                                        <ap:NotesXhtmlData Dirty="0000000000000001" PreviewPlainText="我是 C:\Users\Administrator\Desktop\顶级\一级1\二级1 下的html文件">
                                            <html
                                                xmlns="http://www.w3.org/1999/xhtml">
                                                <p>我是 C:\Users\Administrator\Desktop\顶级\一级1\二级1 下的html文件</p>
                                            </html>
                                        </ap:NotesXhtmlData>
                                    </ap:NotesGroup>
                                    <ap:Hyperlink  Url="C:\Users\Administrator\Desktop\顶级\一级1\二级1" />
                                </ap:Topic>
                            </ap:SubTopics>
                            <ap:TopicViewGroup ViewIndex="0">
                                <ap:Collapsed Collapsed="false" Dirty="0000000000000000"/>
                            </ap:TopicViewGroup>
                            <ap:Text Dirty="0000000000000001" PlainText="一级1" ReadOnly="false">
                                <ap:Font/>
                            </ap:Text>
                            <ap:NotesGroup>
                                <ap:NotesXhtmlData Dirty="0000000000000001" PreviewPlainText="我是 C:\Users\Administrator\Desktop\顶级\一级1 下的html文件">
                                    <html
                                        xmlns="http://www.w3.org/1999/xhtml">
                                        <p>我是 C:\Users\Administrator\Desktop\顶级\一级1 下的html文件</p>
                                    </html>
                                </ap:NotesXhtmlData>
                            </ap:NotesGroup>
                            <ap:Offset Dirty="0000000000000001" CX="30." CY="0."/>
                            <ap:Hyperlink  Url="C:\Users\Administrator\Desktop\顶级\一级1" />
                        </ap:Topic>
                        <ap:Topic Dirty="0000000000000001"  Gen="0000000000000000">
                            <ap:SubTopics>
                                <ap:Topic Dirty="0000000000000001"  Gen="0000000000000000">
                                    <ap:SubTopics>
                                        <ap:Topic Dirty="0000000000000001"  Gen="0000000000000000">
                                            <ap:TopicViewGroup ViewIndex="0">
                                                <ap:Collapsed Collapsed="false" Dirty="0000000000000000"/>
                                            </ap:TopicViewGroup>
                                            <ap:Text Dirty="0000000000000001" PlainText="三级1" ReadOnly="false">
                                                <ap:Font/>
                                            </ap:Text>
                                            <ap:NotesGroup>
                                                <ap:NotesXhtmlData Dirty="0000000000000001" PreviewPlainText="我是 C:\Users\Administrator\Desktop\顶级\一级2\二级1\三级1 下的html文件">
                                                    <html
                                                        xmlns="http://www.w3.org/1999/xhtml">
                                                        <p>我是 C:\Users\Administrator\Desktop\顶级\一级2\二级1\三级1 下的html文件</p>
                                                    </html>
                                                </ap:NotesXhtmlData>
                                            </ap:NotesGroup>
                                            <ap:Hyperlink  Url="C:\Users\Administrator\Desktop\顶级\一级2\二级1\三级1" />
                                        </ap:Topic>
                                    </ap:SubTopics>
                                    <ap:TopicViewGroup ViewIndex="0">
                                        <ap:Collapsed Collapsed="false" Dirty="0000000000000000"/>
                                    </ap:TopicViewGroup>
                                    <ap:Text Dirty="0000000000000001" PlainText="二级1" ReadOnly="false">
                                        <ap:Font/>
                                    </ap:Text>
                                    <ap:NotesGroup>
                                        <ap:NotesXhtmlData Dirty="0000000000000001" PreviewPlainText="我是 C:\Users\Administrator\Desktop\顶级\一级2\二级1 下的html文件">
                                            <html
                                                xmlns="http://www.w3.org/1999/xhtml">
                                                <p>我是 C:\Users\Administrator\Desktop\顶级\一级2\二级1 下的html文件</p>
                                            </html>
                                        </ap:NotesXhtmlData>
                                    </ap:NotesGroup>
                                    <ap:Hyperlink  Url="C:\Users\Administrator\Desktop\顶级\一级2\二级1" />
                                </ap:Topic>
                            </ap:SubTopics>
                            <ap:TopicViewGroup ViewIndex="0">
                                <ap:Collapsed Collapsed="false" Dirty="0000000000000000"/>
                            </ap:TopicViewGroup>
                            <ap:Text Dirty="0000000000000001" PlainText="一级2" ReadOnly="false">
                                <ap:Font/>
                            </ap:Text>
                            <ap:NotesGroup>
                                <ap:NotesXhtmlData Dirty="0000000000000001" PreviewPlainText="我是 C:\Users\Administrator\Desktop\顶级\一级2 下的html文件">
                                    <html
                                        xmlns="http://www.w3.org/1999/xhtml">
                                        <p>我是 C:\Users\Administrator\Desktop\顶级\一级2 下的html文件</p>
                                    </html>
                                </ap:NotesXhtmlData>
                            </ap:NotesGroup>
                            <ap:Offset Dirty="0000000000000001" CX="30." CY="0."/>
                            <ap:Hyperlink  Url="C:\Users\Administrator\Desktop\顶级\一级2" />
                        </ap:Topic>
                    </ap:SubTopics>
                    <ap:TopicViewGroup ViewIndex="0">
                        <ap:Collapsed Collapsed="false" Dirty="0000000000000000"/>
                    </ap:TopicViewGroup>
                    <ap:Text Dirty="0000000000000001" PlainText="顶级" ReadOnly="false">
                        <ap:Font/>
                    </ap:Text>
                </ap:Topic>
            </ap:OneTopic>
        </ap:Map>
作者: 5i365    时间: 2022-3-15 12:51

本帖最后由 5i365 于 2022-3-15 14:32 编辑

查询结点路径,已经用下面的代码找到了!

但编程水平水限,还有两个重要的问题没解决:
1.不知道如何遍历取所有的值, 因为各个URL值在不同的级别上,
2.取到值后,还要将值设置到同一父结点的NotesGroup子结点下的NotesXhtmlData结点下
在百度也没搜索到有参考性的资料,求路过高手支招, 感谢!

$xmldata = [xml](Get-Content Document.xml -enc UTF8)
#顶级\一级1
$xmldata.Map.OneTopic.Topic.SubTopics.Topic[0].Hyperlink
#顶级\一级2
$xmldata.Map.OneTopic.Topic.SubTopics.Topic[1].Hyperlink

作者: went    时间: 2022-3-15 20:31

$xmldata.GetElementsByTagName('ap:Hyperlink')
作者: 5i365    时间: 2022-3-15 21:23

回复 4# went


大侠真是牛X, 一招制敌, 取到了所有路径
下面这第二点,一点头绪都没有
2.取到路径值后,还要将路径下的html文件内容设置到同一父结点的NotesGroup子结点下的NotesXhtmlData结点下
作者: 5i365    时间: 2022-3-15 21:27

本帖最后由 5i365 于 2022-3-15 21:29 编辑

回复 4# went


    另外, 这个xml文件是某一文件中载取的一部分, 其它部分可能也有url的属性, 怎样加个限定条件, 更稳定一些呢? 好像前面的ap: 就是个限制条件, 感觉应该不会有情况
作者: 5i365    时间: 2022-3-16 07:49

本帖最后由 5i365 于 2022-3-16 07:57 编辑

回复 4# went


在国外论坛发贴, 有人给了一条回复, 这次应该所有条件都具备了, 就差编程了
感觉自己应该可以搞定了, 完全是胡搞一气, 直到有了想要的输出才明白了点门道
PS真是太强大了, 代码量比C#和PY什么的少的多,而且相对好理解一些

$ns = @{ ap = "http://www.w3.org" }
$a = Select-Xml "//ap:Hyperlink" ".\Document.xml" -Namespace $ns

$p = $a[0].node.ParentNode #第一个路径的父结点

$p.NotesGroup.NotesXhtmlData.html #html结点
作者: 5i365    时间: 2022-3-16 08:27

本帖最后由 5i365 于 2022-3-16 08:39 编辑

回复 4# went


两行代码搞定! 感觉只有PS能做到, PY如果不服可以来战

强烈建议初学批处理的朋友直接学PS,我对BAT基本上一看就晕, PY也觉得麻烦, 要装东西, 配置环境!

但是对PS简单些都能理解, 而且PS可以跨平台了, 学了之后, WIN, Mac os, linux 都有用武之地了!
  1. $a = Select-Xml "//ap:Hyperlink" ".\Document.xml" -Namespace @{ ap = "http://www.w3.org" }
  2. $a[0].node.ParentNode.NotesGroup.NotesXhtmlData.innerxml = (gc "$($a[0].node.url)\*.html" -enc UTF8)
复制代码

作者: 5i365    时间: 2022-3-16 08:43

利用管道一行代码搞定!
  1. Select-Xml "//ap:Hyperlink" ".\Document.xml" -Namespace @{ ap = "http://www.w3.org" } | %{$_.node.ParentNode.NotesGroup.NotesXhtmlData.innerxml = gc "$($_.node.url)\*.html" -enc UTF8}
复制代码





欢迎光临 批处理之家 (http://bathome.net./) Powered by Discuz! 7.2