如何让xml条件列表更加紧凑

问题描述 投票:0回答:1

按照我的团队的要求,我正在尝试减少 xml,使其更短/紧凑。

我所有的构建过程中,下面的格式大约有 1000 行长,但我很确定有一种方法可以使它更紧凑。 有没有办法缩短 Condition 或 SuccessCriteria 标记,以便我使用周围 xml 等属性?我需要考虑具有多个条件或 SuccessCriteria 的案例,如下所示。 从我的搜索来看,相同的属性对多次,看起来我不能拥有具有相同名称的属性,如果我执行类似于流程标签顶部的操作,则会出现这种情况。

我需要始终调用条件名称/值,因为我使用 LINQ 来读取 xml,并且这些条件和成功标准被放入我迭代的列表中。另外,有时我有 1 个条件对,但有时是 2 个,将来可能是 3 个。与 SuccessCriteria 类似。

<?xml version="1.0" encoding="UTF-8"?>
<BuildVerficationRoot>
<Configuration>
    <Value Name="emailFrom">[email protected]</Value>
    <Value Name="admin_list">[email protected]</Value> 
    <Value Name="verboseLogFileName">VerifyBuildVerbose.txt</Value>
    <Value Name="statsLogProcessVerFileName">ProcessStatusVerificationStats.txt</Value>
    <Value Name="project">proj</Value>
    <Value Name="version">1.0</Value>
</Configuration>
<BuildVerification>
    <codeFreezeTime>19:00</codeFreezeTime>
    <build machine="mach-1">
            <Process name="Proc1"
                startTimeHeader="StartTime"
                endTimeHeader="EndTime"
                failureColumns="ErrorDescription">
                    <Condition
                        name='VersionFile' value="\view\proj\filename1.cs">
                    </Condition>
                    <Condition
                        name='VersionFile' value="\view\proj\filename2.cs">
                    </Condition>
                    <SuccessCriteria>
                        <field>Status</field>
                        <comparison>equal</comparison> 
                        <value>Success</value>
                    </SuccessCriteria>
            </Process>
</build>
<build machine="co.net\share\folder\folder2\">
            <Process name="Stats1"
                startTimeHeader="Time"
                endTimeHeader="Time"
                failureColumns="">
                    <Condition
                            name='VersionId' value="1.0">
                    </Condition>
                    <Condition
                        name='MediaType' value="Incr">
                    </Condition>
                    <SuccessCriteria>
                        <field>Status</field>
                        <comparison>equal</comparison> 
                        <value>Success</value>
                    </SuccessCriteria>
            </Process>
            <Process name="MediaStats"
                startTimeHeader="EndTime"
                endTimeHeader="EndTime"
                failureColumns="">
                        <Condition
                            name1='Ver1' name2="Ver2">
                        </Condition>
                    <SuccessCriteria>
                        <field>MediaType</field>
                        <comparison>equal</comparison> 
                        <value>Full</value>
                    </SuccessCriteria>
            </Process>
            <Process name="MediaStats"
                startTimeHeader="EndTime"
                endTimeHeader="EndTime"
                failureColumns="">
                        <Condition
                            name1='Ver1' name2="Ver2">
                        </Condition>
                    <SuccessCriteria>
                        <field>MediaType</field>
                        <comparison>equal</comparison> 
                        <value>Incr</value>
                    </SuccessCriteria>
            </Process>
            <Process name="ProcessingStats"
                startTimeHeader="StartTime"
                endTimeHeader="EndTime"
                failureColumns="">
                    <Condition
                        name='Project' value="1.0">
                    </Condition>
                    <SuccessCriteria>
                        <field>Deliverables</field>
                        <comparison>notEqual</comparison>
                        <value>""</value>
                    </SuccessCriteria>
                    <SuccessCriteria>
                        <field>InInstallers</field>
                        <comparison>notEqual</comparison>
                        <value>""</value>
                    </SuccessCriteria>
                    <SuccessCriteria>
                        <field>MakePackage</field>
                        <comparison>notEqual</comparison>
                        <value>""</value>
                    </SuccessCriteria>
                    <SuccessCriteria>
                        <field>Publish</field>
                        <comparison>notEqual</comparison>
                        <value>""</value>
                    </SuccessCriteria>
                        
            </Process>
        </build>
        
</BuildVerification>
</BuildVerficationRoot> 
    

我尝试对第一个进程执行以下操作,但出现错误:

c# System.Xml>XmlException:“名称”是重复的属性名称。

<Process name="SpinFileVersionStats"
                startTimeHeader="StartTime"
                endTimeHeader="EndTime"
                failureColumns="ErrorDescription">
                    <Condition name='VersionFile' value="\view\proj\filename1.cs"
                               name='VersionFile2' value="\view\proj\filename2.cs"></Condition>
                    <SuccessCriteria>
                        <field>Status</field>
                        <comparison>equal</comparison> 
                        <value>Success</value>
                    </SuccessCriteria>
    </Process>

所以我的问题是,是否有更紧凑的方式在 xml 中显示相同的信息?我不是在谈论删除条件标签周围的回车符。 谢谢!

xml attributes tags
1个回答
0
投票

XML 属性名称必须是唯一的格式良好的 XML 中的每个元素

您可以通过调整元素与属性设计使您的XML更加紧凑一致:

<Process name="Proc1"
         startTimeHeader="StartTime"
         endTimeHeader="EndTime"
         failureColumns="ErrorDescription">
  <Condition VersionFile="\view\proj\filename1.cs"/>
  <Condition VersionFile="\view\proj\filename2.cs"/>
  <SuccessCriteria field="Status"
                   comparison="equal"
                   value="Success"/>
</Process>

注释

  • 此设计遵循以下准则:属性适用于以下数据: 不需要进一步的层级组织。
  • 这假设您之前的
    name
    属性的值可能会 在语法上直接写为 XML 属性名称。
  • 使用自闭合标签可以更简洁地编写空元素。
© www.soinside.com 2019 - 2024. All rights reserved.