代码之家  ›  专栏  ›  技术社区  ›  wolfsilver00

嵌套信息的XSLT模糊处理:

  •  -1
  • wolfsilver00  · 技术社区  · 2 年前

    我需要混淆以下xml,大部分工作已经完成,除了最后一个嵌套数据(性别)之外,我几乎混淆了所有内容,我不知道如何处理:

    <?xml version='1.0' encoding='UTF-8'?>
    <env:Envelope
        xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
        <env:Body>
            <wd:Report_Data
                xmlns:wd="urn:URN">
                <wd:Report_Entry>
                    <wd:Candidate_ID>CANDID</wd:Candidate_ID>
                    <wd:First_Name>FIRSTNAME</wd:First_Name>
                    <wd:Last_Name>LASTNAME</wd:Last_Name>
                    <wd:Email>EMAIL</wd:Email>
                    <wd:Job_Requisition wd:Descriptor="JR0202517 Graduate Intern Technical (Open)">
                        <wd:ID wd:type="WID">7f0219076bc1010a481ed02402b40000</wd:ID>
                        <wd:ID wd:type="Job_Requisition_ID">JR0202517</wd:ID>
                    </wd:Job_Requisition>
                    <wd:Candidate_Stage1>REVIEW</wd:Candidate_Stage1>
                    <wd:Candidate_Stage wd:Descriptor="Review">
                        <wd:ID wd:type="WID">31350d72f899430fb446b410c1e368cd</wd:ID>
                        <wd:ID wd:type="Recruiting_Stage_ID">REVIEW</wd:ID>
                    </wd:Candidate_Stage>
                    <wd:Created_Moment>2023-02-24T03:54:51.948-08:00</wd:Created_Moment>
                    <wd:Job_Application_Date>2023-03-17</wd:Job_Application_Date>
                    <wd:Job_Application_Source wd:Descriptor="Social Network -> Facebook">
                        <wd:ID wd:type="WID">dc8bf79476611087891d570080ae09fc</wd:ID>
                        <wd:ID wd:type="Applicant_Source_ID">Facebook</wd:ID>
                    </wd:Job_Application_Source>
                    <wd:Phone_Number>PHONE</wd:Phone_Number>
                    <wd:Country>COUNTRY</wd:Country>
                    <wd:Internal>0</wd:Internal>
                    <wd:gender wd:Descriptor="Male">
                        <wd:ID wd:type="WID">dc8bf79476611087d99a5866c88b70e2</wd:ID>
                        <wd:ID wd:type="Gender_Code">M</wd:ID>
                    </wd:gender>
                    <wd:fileName>FILENAME</wd:fileName>
                    <wd:attachmentContent>BASE64</wd:attachmentContent>
                </wd:Report_Entry>
            </wd:Report_Data>
        </env:Body>
    </env:Envelope>
    
    

    我需要描述符值“Male”和性别代码“M”的值,这样就不会破坏整个请求的语法

    我使用此xslt来混淆大多数值:

        <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
        <xsl:template match="node()|@*">
            <xsl:copy>
                <xsl:apply-templates select="node()|@*"/> 
            </xsl:copy> 
        </xsl:template>
        <xsl:template match="*:Email">
            <xsl:copy>
                <xsl:apply-templates select="@*"/>
                <xsl:text>[Obfuscated Email]</xsl:text> 
            </xsl:copy> 
        </xsl:template>
        <xsl:template match="*:First_Name">
            <xsl:copy>
                <xsl:apply-templates select="@*"/>
                <xsl:text>[Obfuscated Name]</xsl:text> 
            </xsl:copy> 
        </xsl:template>
        <xsl:template match="*:Last_Name">
            <xsl:copy>
                <xsl:apply-templates select="@*"/>
                <xsl:text>[Obfuscated Last Name]</xsl:text> 
            </xsl:copy> 
        </xsl:template>
        <xsl:template match="*:Phone_Number">
            <xsl:copy>
                <xsl:apply-templates select="@*"/>
                <xsl:text>[Obfuscated Phone]</xsl:text> 
            </xsl:copy> 
        </xsl:template>
        <xsl:template match="*:attachmentContent">
            <xsl:copy>
                <xsl:apply-templates select="@*"/>
                <xsl:text>[Obfuscated Base64 Attachment]</xsl:text> 
            </xsl:copy> 
        </xsl:template>
    <xsl:template match="*:fileName">
            <xsl:copy>
                <xsl:apply-templates select="@*"/>
                <xsl:text>[Obfuscated FileName]</xsl:text> 
            </xsl:copy> 
        </xsl:template>
    </xsl:stylesheet>
    

    我尝试了上面的方法来混淆M和Male,但如果我分开做,由于从模板中复制(我认为),它只是取消了第一次更改。。这是我学习xslt的第一天,这是我所能做到的

    预期结果:

    <env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/">
    <env:Body>
        <wd:Report_Data xmlns:wd="urn:URN">
            <wd:Report_Entry>
                <wd:Candidate_ID>CANDID</wd:Candidate_ID>
                <wd:First_Name>[Obfuscated Name]</wd:First_Name>
                <wd:Last_Name>[Obfuscated Last Name]</wd:Last_Name>
                <wd:Email>[Obfuscated Email]</wd:Email>
                <wd:Job_Requisition wd:Descriptor="JR0202517 Graduate Intern Technical (Open)">
                    <wd:ID wd:type="WID">7f0219076bc1010a481ed02402b40000</wd:ID>
                    <wd:ID wd:type="Job_Requisition_ID">JR0202517</wd:ID>
                </wd:Job_Requisition>
                <wd:Candidate_Stage1>REVIEW</wd:Candidate_Stage1>
                <wd:Candidate_Stage wd:Descriptor="Review">
                    <wd:ID wd:type="WID">31350d72f899430fb446b410c1e368cd</wd:ID>
                    <wd:ID wd:type="Recruiting_Stage_ID">REVIEW</wd:ID>
                </wd:Candidate_Stage>
                <wd:Created_Moment>2023-02-24T03:54:51.948-08:00</wd:Created_Moment>
                <wd:Job_Application_Date>2023-03-17</wd:Job_Application_Date>
                <wd:Job_Application_Source wd:Descriptor="Social Network -&gt; Facebook">
                    <wd:ID wd:type="WID">dc8bf79476611087891d570080ae09fc</wd:ID>
                    <wd:ID wd:type="Applicant_Source_ID">Facebook</wd:ID>
                </wd:Job_Application_Source>
                <wd:Phone_Number>[Obfuscated Phone]</wd:Phone_Number>
                <wd:Country>COUNTRY</wd:Country>
                <wd:Internal>0</wd:Internal>
                <wd:gender wd:Descriptor="Obfuscated Gender">
                    <wd:ID wd:type="WID">dc8bf79476611087d99a5866c88b70e2</wd:ID>
                    <wd:ID wd:type="Gender_Code">"Obfuscated Gender Code"</wd:ID>
                </wd:gender>
                <wd:fileName>[Obfuscated FileName]</wd:fileName>
                <wd:attachmentContent>[Obfuscated Base64 Attachment]</wd:attachmentContent>
            </wd:Report_Entry>
        </wd:Report_Data>
    </env:Body>
    

    </env:信封>

    1 回复  |  直到 2 年前
        1
  •  1
  •   michael.hor257k    2 年前

    首先,样式表声明 version="1.0" 但是使用通配符的表达式 * 因为名称空间前缀需要支持XSLT2.0或更高版本的处理器。

    现在,我相信你可以做得很简单:

    XSLT 1.0

    <xsl:stylesheet version="1.0" 
    xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
    xmlns:wd="urn:URN">
    
        <xsl:template match="node()|@*">
            <xsl:copy>
                <xsl:apply-templates select="node()|@*"/> 
            </xsl:copy> 
        </xsl:template>
        
        <xsl:template match="wd:Email">
            <xsl:copy>
                <xsl:apply-templates select="@*"/>
                <xsl:text>[Obfuscated Email]</xsl:text> 
            </xsl:copy> 
        </xsl:template>
        
        <xsl:template match="wd:First_Name">
            <xsl:copy>
                <xsl:apply-templates select="@*"/>
                <xsl:text>[Obfuscated Name]</xsl:text> 
            </xsl:copy> 
        </xsl:template>
        
        <xsl:template match="wd:Last_Name">
            <xsl:copy>
                <xsl:apply-templates select="@*"/>
                <xsl:text>[Obfuscated Last Name]</xsl:text> 
            </xsl:copy> 
        </xsl:template>
        
        <xsl:template match="wd:Phone_Number">
            <xsl:copy>
                <xsl:apply-templates select="@*"/>
                <xsl:text>[Obfuscated Phone]</xsl:text> 
            </xsl:copy> 
        </xsl:template>
        
        <xsl:template match="wd:attachmentContent">
            <xsl:copy>
                <xsl:apply-templates select="@*"/>
                <xsl:text>[Obfuscated Base64 Attachment]</xsl:text> 
            </xsl:copy> 
        </xsl:template>
        
        <xsl:template match="wd:fileName">
            <xsl:copy>
                <xsl:apply-templates select="@*"/>
                <xsl:text>[Obfuscated FileName]</xsl:text> 
            </xsl:copy> 
        </xsl:template>
        
        <xsl:template match="wd:gender/@wd:Descriptor">
            <xsl:attribute name="wd:Descriptor">[Obfuscated Gender]</xsl:attribute>
        </xsl:template>
    
        <xsl:template match="wd:ID[@wd:type='Gender_Code']">
            <wd:ID wd:type="Gender_Code">[Obfuscated Gender Code]</wd:ID>
        </xsl:template>
           
    </xsl:stylesheet>