2015-11-27 44 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; 

}