2015-11-27 41 views
0

我有一個這樣的XML文件。如何從XML文件創建一個定製的POJO類?

<?xml version="1.0" encoding="UTF-8"?> 
<elements area="Login" page="Login" description="Description about the generated class">  
    <element key="USERNAMETEXTBOX" findBy="ID" id="username" tag="input" name="" text="" xPath="//*[@id='username']"/>  
    <element key="PASSWORDTEXTBOX" findBy="ID" id="password" tag="input" name="" text="" xPath="//*[@id='password']"/> 
    <element key="LOGINBUTTON" findBy="XPATH" id="" tag="button" name="" text="" xPath="//input[@value='LOGIN']"/> 
</elements> 

讀這個XML文件,我需要生成一個POJO類,看起來像這樣。

public class LoginPO extends CommonActionHelper{ 

    LoginBean loginBeanObj= new LoginBean(); 
    private WebDriver driver; 

    @FindBy(id="username") 
    private WebElement USERNAME; 

    @FindBy(id="password") 
    private WebElement PASSWORD; 

    @FindBy(xpath="//input[@value='LOGIN']") 
    private WebElement LOGIN;  
} 

基本上,elements標籤以字符串「PO」所附的page屬性應該是類名。 element標記的key屬性必須是成員變量。根據findBy屬性值(ID/XPATH),必須在註釋中添加相應的屬性@FindBy()

請幫忙!

+1

你可以嘗試'阿帕奇velocity' –

+0

@RogerDwan有一個示例項目或我可以參考的代碼?這將有很大的幫助。 – NaveenBharadwaj

+1

[在模板中顯示基本的XML處理:XML«Velocity«Java](http://www.java2s.com/Code/Java/Velocity/ShowbasicXMLhandlinginatemplate.htm) 我發現這對初學者來說不難理解。 –

回答

0

使用XSLT:

<?xml version="1.0" encoding="UTF-8"?> 
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0"> 
<xsl:output method="text"/> 
<xsl:template match="/"> 
<xsl:apply-templates select="elements"/> 
</xsl:template> 

<xsl:template match="elements"> 
public class <xsl:value-of select="@area"/>PO extends CommonActionHelper{ 
<xsl:value-of select="@area"/>Bean <xsl:value-of select="translate(@area,'ABCDEFGHIJKLMNOPQRSTUVWXYZ','abcdefghijklmnopqrstuvwxyz')"/>BeanObj= new <xsl:value-of select="@area"/>Bean(); 
private WebDriver driver; 
<xsl:apply-templates select="element"/> 
} 
</xsl:template> 


<xsl:template match="element[@findBy='ID']"> 
@FindBy(id="<xsl:value-of select="@id"/>") 
private WebElement <xsl:apply-templates select="." mode="variable"/>; 
</xsl:template> 

<xsl:template match="element[@findBy='XPATH']"> 
@FindBy(xpath="<xsl:value-of select="@xPath"/>") 
private WebElement <xsl:apply-templates select="." mode="variable"/>; 
</xsl:template> 

<xsl:template match="element" mode="variable"> 
<xsl:choose> 
    <xsl:when test="substring(@key, string-length(@key) - 6) ='TEXTBOX'"><xsl:value-of select="substring(@key,1,string-length(@key)-7)"/></xsl:when> 
    <xsl:when test="substring(@key, string-length(@key) - 5) ='BUTTON'"><xsl:value-of select="substring(@key,1,string-length(@key)-6)"/></xsl:when> <xsl:otherwise>!!<xsl:value-of select="@key"/></xsl:otherwise> 
</xsl:choose> 
</xsl:template> 

</xsl:stylesheet> 

處理:

$ xsltproc的transform.xsl的input.xml

public class LoginPO extends CommonActionHelper{ 
LoginBean loginBeanObj= new LoginBean(); 
private WebDriver driver; 

@FindBy(id="username") 
private WebElement USERNAME; 

@FindBy(id="password") 
private WebElement PASSWORD; 

@FindBy(xpath="//input[@value='LOGIN']") 
private WebElement LOGIN; 

}