用于解析XML并从某个URL下载文件然后将其传输到另一台计算机的脚本

时间:2012-02-08 19:30:45

标签: xml bash parsing xsd

亲爱的Stackoverflowers:

我需要您的帮助来完成以下任务:我需要一台主计算机才能下载预定义的XML文件然后解析它;使用可用信息,脚本应定期识别要从Web服务器下载的正确文件。最后,必须将此文件转移到另一台无法在同一LAN中访问Internet的计算机,并将其解压缩到给定位置。但是我有界限:我不能用PHP来完成这个,因为我不能在那里安装任何东西;我建议通过MD5sums这样做,但必须给定一天和一小时才能将文件下载到主计算机,并将其转移到瘦身终端。

我会解释然后问。谢谢!

我设计了这个XML:

<?xml version="1.0"?>
<updateXML id="subdirectory1">
    <file>
        <tarname>compressedFile.tar.gz</tarname>
        <name>fileInsideName</name>
        <filExtension>.ext</filExtension>
        <url protocol="http://">someurl.com/mainDirectory</url>
    </file>
    <update>
        <download>2012-02-02T03:00:00.00000</download>
        <copyTo terminal="1">2012-02-02T09:00:00.00000</copyTo>
    </update>
</updateXML>

这个有效的XML Schema(XSD)

<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:element name="updateXML">
        <xsd:complexType>
            <xsd:sequence>

                <xsd:element name="file" minOccurs="1" maxOccurs="unbounded">
                    <xsd:complexType>
                        <xsd:all>
                            <xsd:element name="tarname" type="xsd:string"/>
                            <xsd:element name="name" type="xsd:string"/>
                            <xsd:element name="filExtension" type="xsd:string"/>
                            <xsd:element name="url">
                                <xsd:complexType>
                                    <xsd:simpleContent>
                                        <xsd:extension base="xsd:string">
                                            <xsd:attribute name="protocol" type="xsd:string" />
                                        </xsd:extension>
                                    </xsd:simpleContent>
                                </xsd:complexType>
                            </xsd:element>
                        </xsd:all>
                    </xsd:complexType>
                </xsd:element>

                <xsd:element name="update" minOccurs="1" maxOccurs="1">
                    <xsd:complexType>
                        <xsd:sequence>
                            <xsd:element name="download" type="xsd:dateTime" />
                            <xsd:element name="copyTo">
                                <xsd:complexType>
                                    <xsd:simpleContent>
                                        <xsd:extension base="xsd:string">
                                            <xsd:attribute name="terminal" type="xsd:int" />
                                        </xsd:extension>
                                    </xsd:simpleContent>
                                </xsd:complexType>
                            </xsd:element>
                        </xsd:sequence>
                    </xsd:complexType>
                </xsd:element>

            </xsd:sequence>
            <xsd:attribute name="id" type="xsd:string"/>
        </xsd:complexType>
    </xsd:element>
</xsd:schema>

我已经研究过,我发现XMLlint可以解析XML文件。现在没有问题:

$ xmllint --noout --schema updatemenus.xsd updatemenus.xml 
updatemenus.xml validates

我认为在一个可以帮助我完成给定任务的过程中。请告诉我我的建议步骤是否正确:

  1. 生成XML并使用它的XSD验证它。
  2. 将其下载到主计算机并在那里解析。使用可用信息构建要下载的完整URL。
  3. 下载后,将其安全复制到LAN中所需的终端
  4. 检查是否有更新的XML可用并下载(cron进程?)
  5. 您认为这是正确的吗?如果是这样,现在我的XML有效,现在怎么样? ='/ 我该如何使用它的信息?我是XMLlint和XPath的新手。我现在该怎么办???

    非常感谢。

1 个答案:

答案 0 :(得分:0)

我无法帮助整个事情,但你会在

中找到dateTime
http://www.w3.org/2001/XMLSchema.xsd

修改

我的观点是你的文件指定了

 <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

这是一个现有文档,但不是真正的.xsd文件,不会验证您的任何XML。

我希望这会有所帮助。