Xpath: Select siblings with matching attribute values - xpath

I'm trying to write an Xpath query that selects siblings with matching attribute values. So, given this xml file, I want to get the first eTree (two siblings with the same index value) but not the second (two siblings with different index values):
<eTree Label="IP-SUB">
<eTree Label="NP-SBJ" index="1" id="node-567">
<eLeaf Notext="*exp*" id="node-568"/>
</eTree>
<eTree Label="NP-SE" index="1" id="node-572">
<eTree Label="CL" id="node-573">
<eLeaf Text="se" tokid="w-192" id="node-574"/>
</eTree>
</eTree>
<eTree Label="IP-SUB">
<eTree Label="NP-SBJ" index="1" id="node-567">
<eLeaf Notext="*exp*" id="node-568"/>
</eTree>
<eTree Label="NP-SE" index="2" id="node-572">
<eTree Label="CL" id="node-573">
<eLeaf Text="se" tokid="w-192" id="node-574"/>
</eTree>
</eTree>

One possible XPath that will return eTree elements if it has : child eTree with index attribute matches index of the nearest following sibling eTree
//eTree[eTree[#index=following-sibling::eTree[1]/#index]]
Xpathtester Demo
input xml for demo :
<root>
<eTree Label="IP-SUB">
<eTree Label="NP-SBJ" index="1" id="node-567">
<eLeaf Notext="*exp*" id="node-568"/>
</eTree>
<eTree Label="NP-SE" index="1" id="node-572">
<eTree Label="CL" id="node-573"/>
<eLeaf Text="se" tokid="w-192" id="node-574"/>
</eTree>
</eTree>
<eTree Label="IP-SUB">
<eTree Label="NP-SBJ" index="1" id="node-567">
<eLeaf Notext="*exp*" id="node-568"/>
</eTree>
<eTree Label="NP-SE" index="2" id="node-572">
<eTree Label="CL" id="node-573"/>
<eLeaf Text="se" tokid="w-192" id="node-574"/>
</eTree>
</eTree>
</root>
output :
<eTree Label="IP-SUB">
<eTree Label="NP-SBJ" id="node-567" index="1">
<eLeaf Notext="*exp*" id="node-568"/>
</eTree>
<eTree Label="NP-SE" id="node-572" index="1">
<eTree Label="CL" id="node-573"/>
<eLeaf Text="se" id="node-574" tokid="w-192"/>
</eTree>
</eTree>

Related

Issues with playing MPEG-DASH MPD file

I have built a simple mpeg-dash player using exoplayer API in Android. It reads and plays this MPD file. But can't play the following MPD file generated by FFmpeg:
ffmpeg -re -i .\video-h264.mkv -map 0 -map 0 -c:a aac -c:v libx264 -b:v:0 800k -b:v:1 300k -s:v:1 320x170 -profile:v:1 baseline -profile:v:0 main -bf 1 -keyint_min 120 -g 120 -sc_threshold 0 -b_strategy 0 -ar:a:1 22050 -use_timeline 1 -use_template 1 -window_size 5 -adaptation_sets "id=0,streams=v id=1,streams=a" -f dash out.mpd
What is the issue? I can't understand it.
<?xml version="1.0" encoding="utf-8"?>
<MPD xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="urn:mpeg:dash:schema:mpd:2011"
xmlns:xlink="http://www.w3.org/1999/xlink"
xsi:schemaLocation="urn:mpeg:DASH:schema:MPD:2011 http://standards.iso.org/ittf/PubliclyAvailableStandards/MPEG-DASH_schema_files/DASH-MPD.xsd"
profiles="urn:mpeg:dash:profile:isoff-live:2011"
type="static"
mediaPresentationDuration="PT16.0S"
maxSegmentDuration="PT5.0S"
minBufferTime="PT10.0S">
<ProgramInformation>
</ProgramInformation>
<ServiceDescription id="0">
</ServiceDescription>
<Period id="0" start="PT0.0S">
<AdaptationSet id="0" contentType="video" startWithSAP="1" segmentAlignment="true" bitstreamSwitching="true" frameRate="24/1" maxWidth="1920" maxHeight="960" par="2:1">
<Representation id="0" mimeType="video/mp4" codecs="avc1.4d4028" bandwidth="800000" width="1920" height="960" sar="1:1">
<SegmentTemplate timescale="12288" initialization="init-stream$RepresentationID$.m4s" media="chunk-stream$RepresentationID$-$Number%05d$.m4s" startNumber="1">
<SegmentTimeline>
<S t="0" d="61440" r="2" />
<S d="13312" />
</SegmentTimeline>
</SegmentTemplate>
</Representation>
<Representation id="2" mimeType="video/mp4" codecs="avc1.42c00d" bandwidth="300000" width="320" height="170" sar="17:16">
<SegmentTemplate timescale="12288" initialization="init-stream$RepresentationID$.m4s" media="chunk-stream$RepresentationID$-$Number%05d$.m4s" startNumber="1">
<SegmentTimeline>
<S t="0" d="61440" r="2" />
<S d="13312" />
</SegmentTimeline>
</SegmentTemplate>
</Representation>
</AdaptationSet>
<AdaptationSet id="1" contentType="audio" startWithSAP="1" segmentAlignment="true" bitstreamSwitching="true" lang="eng">
<Representation id="1" mimeType="audio/mp4" codecs="mp4a.40.2" bandwidth="128000" audioSamplingRate="48000">
<AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2" />
<SegmentTemplate timescale="48000" initialization="init-stream$RepresentationID$.m4s" media="chunk-stream$RepresentationID$-$Number%05d$.m4s" startNumber="1">
<SegmentTimeline>
<S t="0" d="238584" />
<S d="239616" />
<S d="240640" />
<S d="50176" />
</SegmentTimeline>
</SegmentTemplate>
</Representation>
<Representation id="3" mimeType="audio/mp4" codecs="mp4a.40.2" bandwidth="128000" audioSamplingRate="22050">
<AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2" />
<SegmentTemplate timescale="22050" initialization="init-stream$RepresentationID$.m4s" media="chunk-stream$RepresentationID$-$Number%05d$.m4s" startNumber="1">
<SegmentTimeline>
<S t="0" d="109564" />
<S d="110592" r="1" />
<S d="22519" />
</SegmentTimeline>
</SegmentTemplate>
</Representation>
</AdaptationSet>
</Period>
</MPD>
My simple ExoPlayer API code is HERE. And my MPD is located on a local server. The error I get is this:
2022-01-20 11:49:13.751 11201-11929/com.example.myexoplayer E/ExoPlayerImplInternal: Source error.
com.google.android.exoplayer2.upstream.HttpDataSource$HttpDataSourceException: Unable to connect to http://192.168.80.80/dash/out.mpd
at com.google.android.exoplayer2.upstream.DefaultHttpDataSource.open(DefaultHttpDataSource.java:194)
at com.google.android.exoplayer2.upstream.DataSourceInputStream.checkOpened(DataSourceInputStream.java:102)
at com.google.android.exoplayer2.upstream.DataSourceInputStream.open(DataSourceInputStream.java:65)
at com.google.android.exoplayer2.upstream.ParsingLoadable.load(ParsingLoadable.java:114)
at com.google.android.exoplayer2.upstream.Loader$LoadTask.run(Loader.java:295)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
at java.lang.Thread.run(Thread.java:923)
Caused by: java.io.IOException: Cleartext HTTP traffic to 192.168.80.80 not permitted
at com.android.okhttp.HttpHandler$CleartextURLFilter.checkURLPermitted(HttpHandler.java:127)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.execute(HttpURLConnectionImpl.java:462)
at com.android.okhttp.internal.huc.HttpURLConnectionImpl.connect(HttpURLConnectionImpl.java:131)
at com.google.android.exoplayer2.upstream.DefaultHttpDataSource.makeConnection(DefaultHttpDataSource.java:429)
at com.google.android.exoplayer2.upstream.DefaultHttpDataSource.makeConnection(DefaultHttpDataSource.java:350)
at com.google.android.exoplayer2.upstream.DefaultHttpDataSource.open(DefaultHttpDataSource.java:192)
at com.google.android.exoplayer2.upstream.DataSourceInputStream.checkOpened(DataSourceInputStream.java:102) 
at com.google.android.exoplayer2.upstream.DataSourceInputStream.open(DataSourceInputStream.java:65) 
at com.google.android.exoplayer2.upstream.ParsingLoadable.load(ParsingLoadable.java:114) 
at com.google.android.exoplayer2.upstream.Loader$LoadTask.run(Loader.java:295) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641) 
at java.lang.Thread.run(Thread.java:923) 

How to write xpath (get locator) for appium android automation?

I am writing the appium automation for android application, It does not have proper xpath, class name or ID.
Even in Image, you can clearly check that when I click on get started. It clicks whole frame. I have attached XML as well.
<?xml version='1.0' encoding='UTF-8' standalone='yes' ?>
<hierarchy index="0" class="hierarchy" rotation="0" width="1080" height="2040">
<android.widget.FrameLayout index="0" package="com.novo.android.dev" class="android.widget.FrameLayout" text="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" long-clickable="false" password="false" scrollable="false" selected="false" bounds="[0,0][1080,2040]" displayed="true">
<android.widget.LinearLayout index="0" package="com.novo.android.dev" class="android.widget.LinearLayout" text="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" long-clickable="false" password="false" scrollable="false" selected="false" bounds="[0,0][1080,2040]" displayed="true">
<android.widget.FrameLayout index="0" package="com.novo.android.dev" class="android.widget.FrameLayout" text="" resource-id="android:id/content" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" long-clickable="false" password="false" scrollable="false" selected="false" bounds="[0,60][1080,2040]" displayed="true">
<android.widget.FrameLayout index="0" package="com.novo.android.dev" class="android.widget.FrameLayout" text="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" long-clickable="false" password="false" scrollable="false" selected="false" bounds="[0,60][1080,2040]" displayed="true">
<android.webkit.WebView index="0" package="com.novo.android.dev" class="android.webkit.WebView" text="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" long-clickable="false" password="false" scrollable="false" selected="false" bounds="[0,60][1080,2040]" displayed="true">
<android.webkit.WebView index="0" package="com.novo.android.dev" class="android.webkit.WebView" text="Plaid - Securely Connect" checkable="false" checked="false" clickable="false" enabled="true" focusable="true" focused="false" long-clickable="false" password="false" scrollable="false" selected="false" bounds="[0,60][1080,2040]" displayed="true">
<android.view.View index="0" package="com.novo.android.dev" class="android.view.View" text="" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" long-clickable="false" password="false" scrollable="false" selected="false" bounds="[0,60][1080,2040]" displayed="true" />
</android.webkit.WebView>
</android.webkit.WebView>
<android.widget.ProgressBar index="1" package="com.novo.android.dev" class="android.widget.ProgressBar" text="" resource-id="com.novo.android.dev:id/root_progress_bar" checkable="false" checked="false" clickable="false" enabled="true" focusable="false" focused="false" long-clickable="false" password="false" scrollable="false" selected="false" bounds="[480,990][600,1110]" displayed="true" />
</android.widget.FrameLayout>
</android.widget.FrameLayout>
</android.widget.LinearLayout>
</android.widget.FrameLayout>
</hierarchy>
The button you are about to click is inside android.webkit.WebView. In other words, the app under test is an Android hybrid app.
To identify WebView elements, you should switch into the WebView first.
Java code for automating hybrid apps:
Set<String> contextNames = driver.getContextHandles();
for (String contextName : contextNames) {
System.out.println(contextName); //prints out something like NATIVE_APP, WEBVIEW_1
}
// Switching to webview
driver.context(contextNames.toArray()[1]); // set context to WEBVIEW_1
// do some web testing
String myText = driver.findElement(By.cssSelector(".green_button")).click();
// Switching back to NATIVE_APP
driver.context("NATIVE_APP");
// do more native testing if we want
driver.findElement(By.name("hello")).click();
driver.quit();
For more details, visit offical docs https://appium.io/docs/en/writing-running-appium/web/hybrid/
It looks like a hybrid app .You have to switch to web view context on execution.
For finding elements After launching the app you have to inspect using remote debugging.
https://developers.google.com/web/tools/chrome-devtools/remote-debugging
The xpath is:
'hierarchy/android.widget.FrameLayout/android.widget.LinearLayout/android.widget.FrameLayout/android.widget.FrameLayout/android.webkit.WebView/android.webkit.WebView/android.view.View'
which could be simplified to 'hierarchy//android.view.View'
but the error message is telling you not to use an xPath

Nativescript-vue, How to change BarSeries(Radchart) graph "bars" color?

Code:
<BarSeries v-tkCartesianSeries
categoryProperty="Country"
valueProperty="Amount"
:items="items1" />
<CategoricalAxis v-tkCartesianVerticalAxis />
<LinearAxis v-tkCartesianHorizontalAxis />
You have to define Palette with same series name
<BarSeries v-tkCartesianSeries :items="items1"
categoryProperty="Country" valueProperty="Amount"
seriesName="myLine" />
<Palette v-tkCartesianPalette seriesName="myLine">
<PaletteEntry v-tkCartesianPaletteEntry strokeWidth="5"
strokeColor="red" fillColor="red"></PaletteEntry>
</Palette>
<CategoricalAxis v-tkCartesianHorizontalAxis />
<LinearAxis v-tkCartesianVerticalAxis />
Just use fillColor and strokeColor in the BarSeries
<RadCartesianChart>
<CategoricalAxis v-tkCartesianHorizontalAxis />
<LinearAxis v-tkCartesianVerticalAxis />
<BarSeries v-tkCartesianSeries :items="items" categoryProperty="" valueProperty="" fillColor="red" />
</RadCartesianChart>

Changing the speeds of vehicles at different times

I'm using Omnet++ 5.0, and SUMO 0.25.0, and I'm trying to change the speed of vehicles at certain times. For example, i'm trying to set the speed of the vehicles near the intersection to 0.0, but then after a while i want to move so I'm changing the speed. The vehicles on the same road should be able to move, but the lower lane is the only one responding to the change of the speed, and they move into the intersection to cross it, and ones in the higher lane shown with an arrow are not moving at all.
i tried to monitor the speed of the first vehicle (its ID is 20) in the higher lane, and it shows that the speed keeps on minimizing instead of being changed using the setSpeed().
1st image is the code when setting the speed to 0.0.
2nd image when setting the speed to 13.89
3rd image showing the vehicles, the lower lane in the road to the right are responding to the second command (13.89) unlike the higher lane
the vehicle circled is vehicle 20
Vehicle ID 20
Lane ID -171270025#1_0
Speed 10.2666
Speed after setSpeed(13.89) 10.2666
Vehicle 20 Speed:9.97035
Vehicle 20 Speed:9.65099
Vehicle 20 Speed:9.33599
Vehicle 20 Speed:9.02479
Vehicle 20 Speed:8.71445
Vehicle 20 Speed:8.40909
...
and it keeps on minimizing until it reaches up to this point
Vehicle 20 Speed:0.000168397
Vehicle 20 Speed:0.000151557
Vehicle 20 Speed:0.000136401
Vehicle 20 Speed:0.000122761
Vehicle 20 Speed:0.000110485
Vehicle 20 Speed:9.94365e-005
Vehicle 20 Speed:8.94929e-005
can you suggest something that will help me solve this problem? Thank you!
update:
these are the functions used in the vehicle side in TraCIDemo
to make it short the vehicle requests the permission from the RSU to pass the intersection. Though the vehicles receive the permission, some do not change the speed and move to cross the intersection.
void MyTraCIDemo11p::onDataCross(CrossFromControllerMessage* csm) { // this is the function that is used when receiving the permission to cross, and changes the speed.
int n = 0;
std::string vehichleId = mobility->getExternalId();
for (int i=0 ; i < csm->getVehiclesListArraySize();i++) // this is a list received from the RSU to notify which vehicle to cross the intersection
{
vehicleList.push_back(std::string(csm->getVehiclesList(i)));
}
std::list<std::string>::iterator ttry1;
ttry1 = std::find(vehicleList.begin(), vehicleList.end(), vehichleId);
if (vehichleId == *ttry1){
n = 1;
}
if (state == WAITING && n == 1 ){
findHost()->bubble("Received");
state = QUEUING;
stateToString(state);
traciVehicle->setSpeed(13.89);
}
}
This is the handle position function. it manages the states of the vehicles based on their positions, and exchange of messages with the RSU.
the states of the vehicles change as follows Idle-> Waiting-> Queuing-> crossing-> Idle
void MyTraCIDemo11p::handlePositionUpdate(cObject* obj) {
BaseWaveApplLayer::handlePositionUpdate(obj);
vehiclePosition= mobility->getCurrentPosition();
junctionPosition = traci->junction("1823290733").getPosition();
if ( vehiclePosition.distance(junctionPosition) < 10) // this cas when the vehicle is inside the intersection
{
state = CROSSING;
stateToString(state);
} else if (vehiclePosition.distance(junctionPosition) < 30 && vehiclePosition.distance(junctionPosition) > 10 && state == IDLE && !sentRequestMessage ) // this case when the vehicle just reached the intersection
{
traciVehicle->setSpeed(0.0);
sendRequestMessage(mobility->getExternalId(),traciVehicle->getLaneId()); // it sends a message to the RSU to allow it to cross the intersection
state = WAITING;
stateToString(state);
} else if ((state == CROSSING) && vehiclePosition.distance(junctionPosition) < 9) // this case when the vehicle is passing the intersection
{
findHost()->bubble("i'm crossing");
state = CROSSED;
stateToString(state);
}else if (state == CROSSED) // this case when the vehicle crossed the intersection completely
{
if (!sentCrossedMessage){
sendCrossedMessage(mobility->getExternalId()); //it sends a message to the RSU that it crossed
state = IDLE;
stateToString(state);
}
}else if (state==QUEUING){ // this is when the vehicle is still at the intersection but received the persmission from the RSU to pass the intersection
traciVehicle->setSpeed(13.89);
}
}
}
}
}
// this is the stateToString function used in the handle position
virtual std::string stateToString(State state) const {
std::string s ;
switch(state)
{
case IDLE:
s = "IDLE";
break;
case WAITING:
s = "WAITING";
break;
case QUEUING:
s = "QUEUING";
break;
case CROSSING:
s = "CROSSING";
break;
case CROSSED:
s = "CROSSED";
break;
}
return s;
}
i will include the map xml below
This is the erlangen.net.xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- generated on 12/22/2016 12:09:17 AM by Netedit Version 0.25.0
<?xml version="1.0" encoding="UTF-8"?>
<configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://sumo.dlr.de/xsd/netedit.exeConfiguration.xsd">
<input>
<sumo-net-file value="C:\Users\user\Desktop\MAP\map.net.xml"/>
</input>
<output>
<output-file value="C:\Users\user\Desktop\MAP\map.net.xml"/>
</output>
<processing>
<no-turnarounds value="true"/>
<offset.disable-normalization value="true"/>
<lefthand value="false"/>
<junctions.corner-detail value="0"/>
</processing>
</configuration>
-->
<net version="0.25" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://sumo.dlr.de/xsd/net_file.xsd">
<location netOffset="-239463.70,-2703699.84" convBoundary="0.00,0.00,484.43,238.03" origBoundary="54.430493,24.425071,54.435282,24.427224" projParameter="+proj=utm +zone=40 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"/>
<edge id=":1823286480_0" function="internal">
<lane id=":1823286480_0_0" index="0" disallow="tram rail_urban rail rail_electric ship" speed="13.89" length="4.82" shape="362.07,237.77 361.45,239.12 360.70,239.66 359.82,239.38 358.81,238.29"/>
</edge>
<edge id=":1823289120_0" function="internal">
<lane id=":1823289120_0_0" index="0" disallow="tram rail_urban rail rail_electric ship" speed="13.89" length="4.82" shape="484.14,100.03 485.51,100.63 486.06,101.37 485.79,102.26 484.72,103.29"/>
</edge>
<edge id=":1823289179_0" function="internal">
<lane id=":1823289179_0_0" index="0" disallow="tram rail_urban rail rail_electric ship" speed="13.89" length="4.82" shape="0.28,186.90 -1.08,186.29 -1.63,185.55 -1.36,184.67 -0.28,183.64"/>
</edge>
<edge id=":1823290733_0" function="internal">
<lane id=":1823290733_0_0" index="0" disallow="tram rail_urban rail rail_electric ship" speed="13.89" length="16.31" shape="339.27,135.29 338.52,130.51 338.01,127.23 337.49,123.96 336.74,119.18"/>
</edge>
<edge id=":1823290733_1" function="internal">
<lane id=":1823290733_1_0" index="0" disallow="tram rail_urban rail rail_electric ship" speed="13.89" length="10.91" shape="342.53,134.78 342.47,130.45 343.81,127.12 346.09,125.17"/>
</edge>
<edge id=":1823290733_8" function="internal">
<lane id=":1823290733_8_0" index="0" speed="13.89" length="4.93" shape="346.09,125.17 346.54,124.79 350.66,123.44"/>
</edge>
<edge id=":1823290733_2" function="internal">
<lane id=":1823290733_2_0" index="0" disallow="tram rail_urban rail rail_electric ship" speed="13.89" length="16.33" shape="351.80,129.94 347.03,130.78 343.76,131.35 340.49,131.91 335.71,132.73"/>
</edge>
<edge id=":1823290733_3" function="internal">
<lane id=":1823290733_3_0" index="0" disallow="tram rail_urban rail rail_electric ship" speed="13.89" length="15.80" shape="351.23,126.69 346.89,126.83 343.57,125.54 341.28,122.82 340.00,118.67"/>
</edge>
<edge id=":1823290733_4" function="internal">
<lane id=":1823290733_4_0" index="0" disallow="tram rail_urban rail rail_electric ship" speed="13.89" length="16.31" shape="346.52,117.64 347.27,122.43 347.79,125.70 348.30,128.97 349.05,133.75"/>
</edge>
<edge id=":1823290733_5" function="internal">
<lane id=":1823290733_5_0" index="0" disallow="tram rail_urban rail rail_electric ship" speed="13.89" length="10.93" shape="343.26,118.15 343.33,122.49 342.00,125.82 339.71,127.78"/>
</edge>
<edge id=":1823290733_9" function="internal">
<lane id=":1823290733_9_0" index="0" speed="13.89" length="4.91" shape="339.71,127.78 339.27,128.16 335.15,129.48"/>
</edge>
<edge id=":1823290733_6" function="internal">
<lane id=":1823290733_6_0" index="0" disallow="tram rail_urban rail rail_electric ship" speed="13.89" length="16.29" shape="334.04,122.98 338.81,122.16 342.07,121.60 345.33,121.03 350.09,120.19"/>
</edge>
<edge id=":1823290733_7" function="internal">
<lane id=":1823290733_7_0" index="0" disallow="tram rail_urban rail rail_electric ship" speed="13.89" length="15.77" shape="334.60,126.23 338.92,126.11 342.23,127.41 344.52,130.13 345.79,134.27"/>
</edge>
<edge id=":1823291283_0" function="internal">
<lane id=":1823291283_0_0" index="0" disallow="tram rail_urban rail rail_electric ship" speed="13.89" length="4.82" shape="321.39,0.26 322.01,-1.09 322.76,-1.63 323.64,-1.35 324.65,-0.26"/>
</edge>
<edge id="-171270025#0" from="1823290733" to="1823289179" priority="4" type="highway.residential">
<lane id="-171270025#0_0" index="0" disallow="tram rail_urban rail rail_electric ship" speed="13.89" length="339.76" shape="335.71,132.73 0.84,190.15"/>
<lane id="-171270025#0_1" index="1" disallow="tram rail_urban rail rail_electric ship" speed="13.89" length="339.76" shape="335.15,129.48 0.28,186.90"/>
</edge>
<edge id="-171270025#1" from="1823289120" to="1823290733" priority="4" type="highway.residential">
<lane id="-171270025#1_0" index="0" disallow="tram rail_urban rail rail_electric ship" speed="13.89" length="135.52" shape="485.29,106.54 351.80,129.94"/>
<lane id="-171270025#1_1" index="1" disallow="tram rail_urban rail rail_electric ship" speed="13.89" length="135.52" shape="484.72,103.29 351.23,126.69"/>
</edge>
<edge id="-171270266#0" from="1823290733" to="1823286480" priority="4" type="highway.residential">
<lane id="-171270266#0_0" index="0" disallow="tram rail_urban rail rail_electric ship" speed="13.89" length="104.78" shape="349.05,133.75 365.33,237.26"/>
<lane id="-171270266#0_1" index="1" disallow="tram rail_urban rail rail_electric ship" speed="13.89" length="104.78" shape="345.79,134.27 362.07,237.77"/>
</edge>
<edge id="-171270266#1" from="1823291283" to="1823290733" priority="4" type="highway.residential" shape="323.02,0.00 325.45,15.47 328.84,37.02 339.41,104.25 342.90,126.48">
<lane id="-171270266#1_0" index="0" disallow="tram rail_urban rail rail_electric ship" speed="13.89" length="119.86" shape="327.91,-0.77 330.34,14.70 333.73,36.25 344.30,103.48 346.52,117.64"/>
<lane id="-171270266#1_1" index="1" disallow="tram rail_urban rail rail_electric ship" speed="13.89" length="119.86" shape="324.65,-0.26 327.08,15.21 330.47,36.76 341.04,103.99 343.26,118.15"/>
</edge>
<edge id="171270025#0" from="1823289179" to="1823290733" priority="4" type="highway.residential">
<lane id="171270025#0_0" index="0" disallow="tram rail_urban rail rail_electric ship" speed="13.89" length="339.76" shape="-0.84,180.39 334.04,122.98"/>
<lane id="171270025#0_1" index="1" disallow="tram rail_urban rail rail_electric ship" speed="13.89" length="339.76" shape="-0.28,183.64 334.60,126.23"/>
</edge>
<edge id="171270025#1" from="1823290733" to="1823289120" priority="4" type="highway.residential">
<lane id="171270025#1_0" index="0" disallow="tram rail_urban rail rail_electric ship" speed="13.89" length="135.52" shape="350.09,120.19 483.57,96.78"/>
<lane id="171270025#1_1" index="1" disallow="tram rail_urban rail rail_electric ship" speed="13.89" length="135.52" shape="350.66,123.44 484.14,100.03"/>
</edge>
<edge id="171270266#0" from="1823286480" to="1823290733" priority="4" type="highway.residential">
<lane id="171270266#0_0" index="0" disallow="tram rail_urban rail rail_electric ship" speed="13.89" length="104.78" shape="355.55,238.80 339.27,135.29"/>
<lane id="171270266#0_1" index="1" disallow="tram rail_urban rail rail_electric ship" speed="13.89" length="104.78" shape="358.81,238.29 342.53,134.78"/>
</edge>
<edge id="171270266#1" from="1823290733" to="1823291283" priority="4" type="highway.residential" shape="342.90,126.48 339.41,104.25 328.84,37.02 325.45,15.47 323.02,0.00">
<lane id="171270266#1_0" index="0" disallow="tram rail_urban rail rail_electric ship" speed="13.89" length="119.86" shape="336.74,119.18 334.52,105.02 323.95,37.79 320.56,16.24 318.13,0.77"/>
<lane id="171270266#1_1" index="1" disallow="tram rail_urban rail rail_electric ship" speed="13.89" length="119.86" shape="340.00,118.67 337.78,104.51 327.21,37.28 323.82,15.73 321.39,0.26"/>
</edge>
<junction id="1823286480" type="priority" x="360.44" y="238.03" incLanes="-171270266#0_0 -171270266#0_1" intLanes=":1823286480_0_0" shape="360.39,238.04 353.97,239.05 366.91,237.01 360.49,238.02">
<request index="0" response="0" foes="0" cont="0"/>
</junction>
<junction id="1823289120" type="priority" x="484.43" y="101.66" incLanes="171270025#1_0 171270025#1_1" intLanes=":1823289120_0_0" shape="484.44,101.71 485.56,108.11 483.30,95.21 484.42,101.61">
<request index="0" response="0" foes="0" cont="0"/>
</junction>
<junction id="1823289179" type="priority" x="0.00" y="185.27" incLanes="-171270025#0_0 -171270025#0_1" intLanes=":1823289179_0_0" shape="-0.01,185.22 -1.11,178.81 1.11,191.73 0.01,185.32">
<request index="0" response="0" foes="0" cont="0"/>
</junction>
<junction id="1823290733" type="priority" x="342.90" y="126.48" incLanes="171270266#0_0 171270266#0_1 -171270025#1_0 -171270025#1_1 -171270266#1_0 -171270266#1_1 171270025#0_0 171270025#0_1" intLanes=":1823290733_0_0 :1823290733_8_0 :1823290733_2_0 :1823290733_3_0 :1823290733_4_0 :1823290733_9_0 :1823290733_6_0 :1823290733_7_0" shape="337.69,135.54 350.64,133.51 352.08,131.52 349.81,118.62 348.10,117.39 335.16,119.43 333.77,121.40 335.98,134.31">
<request index="0" response="00000000" foes="11100100" cont="0"/>
<request index="1" response="00010000" foes="10011100" cont="1"/>
<request index="2" response="00010011" foes="10010011" cont="0"/>
<request index="3" response="01110010" foes="01110010" cont="0"/>
<request index="4" response="00000000" foes="01001110" cont="0"/>
<request index="5" response="00000001" foes="11001001" cont="1"/>
<request index="6" response="00110001" foes="00111001" cont="0"/>
<request index="7" response="00100111" foes="00100111" cont="0"/>
</junction>
<junction id="1823291283" type="priority" x="323.02" y="0.00" incLanes="171270266#1_0 171270266#1_1" intLanes=":1823291283_0_0" shape="323.07,-0.01 329.49,-1.02 316.55,1.02 322.97,0.01">
<request index="0" response="0" foes="0" cont="0"/>
</junction>
<junction id=":1823290733_8_0" type="internal" x="346.09" y="125.17" incLanes=":1823290733_1_0 -171270266#1_0" intLanes=":1823290733_2_0 :1823290733_3_0 :1823290733_4_0 :1823290733_7_0"/>
<junction id=":1823290733_9_0" type="internal" x="339.71" y="127.78" incLanes=":1823290733_5_0 171270266#0_0" intLanes=":1823290733_0_0 :1823290733_3_0 :1823290733_6_0 :1823290733_7_0"/>
<connection from="-171270025#0" to="171270025#0" fromLane="1" toLane="1" via=":1823289179_0_0" dir="t" state="M"/>
<connection from="-171270025#1" to="-171270025#0" fromLane="0" toLane="0" via=":1823290733_2_0" dir="s" state="m"/>
<connection from="-171270025#1" to="171270266#1" fromLane="1" toLane="1" via=":1823290733_3_0" dir="l" state="m"/>
<connection from="-171270266#0" to="171270266#0" fromLane="1" toLane="1" via=":1823286480_0_0" dir="t" state="M"/>
<connection from="-171270266#1" to="-171270266#0" fromLane="0" toLane="0" via=":1823290733_4_0" dir="s" state="M"/>
<connection from="-171270266#1" to="-171270025#0" fromLane="1" toLane="1" via=":1823290733_5_0" dir="l" state="m"/>
<connection from="171270025#0" to="171270025#1" fromLane="0" toLane="0" via=":1823290733_6_0" dir="s" state="m"/>
<connection from="171270025#0" to="-171270266#0" fromLane="1" toLane="1" via=":1823290733_7_0" dir="l" state="m"/>
<connection from="171270025#1" to="-171270025#1" fromLane="1" toLane="1" via=":1823289120_0_0" dir="t" state="M"/>
<connection from="171270266#0" to="171270266#1" fromLane="0" toLane="0" via=":1823290733_0_0" dir="s" state="M"/>
<connection from="171270266#0" to="171270025#1" fromLane="1" toLane="1" via=":1823290733_1_0" dir="l" state="m"/>
<connection from="171270266#1" to="-171270266#1" fromLane="1" toLane="1" via=":1823291283_0_0" dir="t" state="M"/>
<connection from=":1823286480_0" to="171270266#0" fromLane="0" toLane="1" dir="s" state="M"/>
<connection from=":1823289120_0" to="-171270025#1" fromLane="0" toLane="1" dir="s" state="M"/>
<connection from=":1823289179_0" to="171270025#0" fromLane="0" toLane="1" dir="s" state="M"/>
<connection from=":1823290733_0" to="171270266#1" fromLane="0" toLane="0" dir="s" state="M"/>
<connection from=":1823290733_1" to="171270025#1" fromLane="0" toLane="1" via=":1823290733_8_0" dir="s" state="m"/>
<connection from=":1823290733_8" to="171270025#1" fromLane="0" toLane="1" dir="s" state="M"/>
<connection from=":1823290733_2" to="-171270025#0" fromLane="0" toLane="0" dir="s" state="M"/>
<connection from=":1823290733_3" to="171270266#1" fromLane="0" toLane="1" dir="s" state="M"/>
<connection from=":1823290733_4" to="-171270266#0" fromLane="0" toLane="0" dir="s" state="M"/>
<connection from=":1823290733_5" to="-171270025#0" fromLane="0" toLane="1" via=":1823290733_9_0" dir="s" state="m"/>
<connection from=":1823290733_9" to="-171270025#0" fromLane="0" toLane="1" dir="s" state="M"/>
<connection from=":1823290733_6" to="171270025#1" fromLane="0" toLane="0" dir="s" state="M"/>
<connection from=":1823290733_7" to="-171270266#0" fromLane="0" toLane="1" dir="s" state="M"/>
<connection from=":1823291283_0" to="-171270266#1" fromLane="0" toLane="1" dir="s" state="M"/>
</net>
This is erlangen.poly.xml
<?xml version="1.0" encoding="UTF-8"?>
<!-- generated on 12/22/16 00:09:29 by SUMO polyconvert Version 0.25.0
<?xml version="1.0" encoding="UTF-8"?>
<configuration xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://sumo.dlr.de/xsd/polyconvertConfiguration.xsd">
<input>
<net-file value="map.net.xml"/>
<osm-files value="map.osm"/>
<type-file value="typemap.xml"/>
</input>
<output>
<output-file value="map.poly.xml"/>
</output>
<processing>
<poi-layer-offset value="5"/>
</processing>
</configuration>
-->
<additional xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://sumo.dlr.de/xsd/additional_file.xsd">
<location netOffset="-239463.70,-2703699.84" convBoundary="-0.00,0.00,484.43,241.92" origBoundary="54.430493,24.425071,54.435282,24.427244" projParameter="+proj=utm +zone=40 +ellps=WGS84 +datum=WGS84 +units=m +no_defs"/>
<poly id="171270235" type="parking" color="184,184,179" fill="1" layer="-1.00" shape="328.55,111.49 336.20,110.20 323.37,34.75 315.71,36.04 328.55,111.49"/>
<poly id="171270768" type="parking" color="184,184,179" fill="1" layer="-1.00" shape="349.14,225.19 369.11,221.68 353.65,134.84 333.69,138.36 349.14,225.19"/>
<poly id="231986403" type="building" color="255,230,230" fill="1" layer="-1.00" shape="393.78,103.22 362.66,108.50 360.32,94.90 355.82,95.67 353.28,80.84 357.82,80.07 357.56,78.56 354.20,79.13 352.62,69.93 382.34,64.88 382.67,66.83 387.40,66.02 391.60,90.49 393.78,103.22"/>
<poly id="397635254" type="natural" color="140,196,107" fill="1" layer="-4.00" shape="269.58,241.92 252.16,146.52 334.19,131.69 337.75,132.71 339.70,135.37 332.44,136.52 346.79,227.28 354.13,226.13 354.80,230.38 353.77,233.64 339.69,236.19 338.46,229.47 269.58,241.92"/>
<poly id="397652904" type="landuse" color="194,194,130" fill="1" layer="-3.00" shape="373.54,198.63 362.71,132.40 373.75,130.61 376.42,146.92 379.08,163.20 381.61,178.69 381.83,180.01 377.02,180.80 379.76,197.62 373.54,198.63"/>
<poly id="397656745" type="natural" color="140,196,107" fill="1" layer="-4.00" shape="346.63,134.59 346.94,132.62 348.39,130.57 351.23,129.43 481.72,107.10 482.29,110.29 481.38,110.18 362.02,131.61 373.34,198.77 379.76,197.62 382.03,212.19 376.62,213.14 377.75,219.58 377.27,221.69 378.50,229.38 366.98,231.49 363.69,230.33 361.74,228.21 361.13,224.69 370.09,223.04 354.40,133.34 346.63,134.59"/>
<poly id="397658254" type="landuse" color="194,194,130" fill="1" layer="-3.00" shape="391.60,90.49 400.82,81.96 405.76,108.70 360.25,116.76 355.82,95.67 360.32,94.90 362.66,108.50 393.78,103.22 391.60,90.49"/>
<poly id="397658256" type="landuse" color="194,194,130" fill="1" layer="-3.00" shape="350.68,118.49 358.39,117.15 351.86,79.91 353.01,79.71 351.15,69.14 363.31,67.02 344.15,35.03 342.90,33.70 338.47,7.10 335.18,4.47 332.18,3.84 326.92,4.76 325.90,7.16 331.93,41.50 337.00,40.62 350.68,118.49"/>
<poly id="397658423" type="parking" color="184,184,179" fill="1" layer="-1.00" shape="341.63,118.05 349.28,116.75 336.45,41.30 328.79,42.59 341.63,118.05"/>
<poly id="397772846" type="landuse" color="194,194,130" fill="1" layer="-3.00" shape="294.28,115.99 296.13,127.03 318.16,123.38 317.45,119.17 320.63,118.65 323.51,112.37 318.79,84.17 304.52,86.53 305.15,90.31 312.71,89.06 315.88,108.05 301.81,110.38 302.51,114.63 294.28,115.99"/>
<poly id="397773661" type="landuse" color="194,194,130" fill="1" layer="-3.00" shape="323.47,118.55 334.65,116.57 335.25,119.88 324.07,121.86 323.47,118.55"/>
</additional>
The generated file by SUMO was corrupted so generating a new one solved the problem.

Geoserver SLD styling issue with external graphics and attribute rules

I am creating a SLD for Geoserver wms layer. The SLD validates without error but the icons will not show in the map. I am using attribute based rules to compare strings to have the correct image show for the correct feature. Here is my code and thanks for any help!
<?xml version="1.0" encoding="ISO-8859-1"?>
<StyledLayerDescriptor version="1.0.0"
xsi:schemaLocation="http://www.opengis.net/sld StyledLayerDescriptor.xsd"
xmlns="http://www.opengis.net/sld"
xmlns:ogc="http://www.opengis.net/ogc"
xmlns:xlink="http://www.w3.org/1999/xlink"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<NamedLayer>
<Name>Upper Shore Image Points</Name>
<UserStyle>
<Title>Vendor Points</Title>
<FeatureTypeStyle>
<Rule>
<Name>Famers Market</Name>
<Title>All Farmers Markets</Title>
<ogc:Filter>
<ogc:PropertyIsLike wildCard="*" singleChar="." escape="!">
<ogc:PropertyName>type</ogc:PropertyName>
<ogc:Literal>farmers maket vendor</ogc:Literal>
</ogc:PropertyIsLike>
</ogc:Filter>
<PointSymbolizer>
<Graphic>
<ExternalGraphic>
<OnlineResource
xlink:type="simple"
xlink:href="Farmers Markets.jpg" />
<Format>image/jpeg</Format>
</ExternalGraphic>
<Size>32</Size>
</Graphic>
</PointSymbolizer>
</Rule>
<Rule>
<Name>Fruit and Vegetable</Name>
<Title>All Fruit and Vegetable</Title>
<ogc:Filter>
<ogc:PropertyIsLike wildCard="*" singleChar="." escape="!">
<ogc:PropertyName>type</ogc:PropertyName>
<ogc:Literal>Fruit and Vegetable Farm</ogc:Literal>
</ogc:PropertyIsLike>
</ogc:Filter>
<PointSymbolizer>
<Graphic>
<ExternalGraphic>
<OnlineResource
xlink:type="simple"
xlink:href="Fruit and Vegetable Farms.jpg" />
<Format>image/jpeg</Format>
</ExternalGraphic>
<Size>32</Size>
</Graphic>
</PointSymbolizer>
</Rule>
<Rule>
<Name>Horse Stable</Name>
<Title>All Horse Stables</Title>
<ogc:Filter>
<ogc:PropertyIsLike wildCard="*" singleChar="." escape="!">
<ogc:PropertyName>type</ogc:PropertyName>
<ogc:Literal>Horse Stable</ogc:Literal>
</ogc:PropertyIsLike>
</ogc:Filter>
<PointSymbolizer>
<Graphic>
<ExternalGraphic>
<OnlineResource
xlink:type="simple"
xlink:href="Horse Stable.jpg" />
<Format>image/jpeg</Format>
</ExternalGraphic>
<Size>32</Size>
</Graphic>
</PointSymbolizer>
</Rule>
<Rule>
<Name>Wool Products</Name>
<Title>All Wool Products</Title>
<ogc:Filter>
<ogc:PropertyIsLike wildCard="*" singleChar="." escape="!">
<ogc:PropertyName>type</ogc:PropertyName>
<ogc:Literal>Wool Products</ogc:Literal>
</ogc:PropertyIsLike>
</ogc:Filter>
<PointSymbolizer>
<Graphic>
<ExternalGraphic>
<OnlineResource
xlink:type="simple"
xlink:href="Wool Products.jpg" />
<Format>image/jpeg</Format>
</ExternalGraphic>
<Size>32</Size>
</Graphic>
</PointSymbolizer>
</Rule>
<Rule>
<Name>Restaurant</Name>
<Title>All Restaurants</Title>
<ogc:Filter>
<ogc:PropertyIsLike wildCard="*" singleChar="." escape="!">
<ogc:PropertyName>type</ogc:PropertyName>
<ogc:Literal>Restaurant</ogc:Literal>
</ogc:PropertyIsLike>
</ogc:Filter>
<PointSymbolizer>
<Graphic>
<ExternalGraphic>
<OnlineResource
xlink:type="simple"
xlink:href="Restaurant.jpg" />
<Format>image/jpeg</Format>
</ExternalGraphic>
<Size>32</Size>
</Graphic>
</PointSymbolizer>
</Rule>
<Rule>
<Name>Coffee Roasting</Name>
<Title>All Coffee Roasting</Title>
<ogc:Filter>
<ogc:PropertyIsLike wildCard="*" singleChar="." escape="!">
<ogc:PropertyName>type</ogc:PropertyName>
<ogc:Literal>Coffee Roasting</ogc:Literal>
</ogc:PropertyIsLike>
</ogc:Filter>
<PointSymbolizer>
<Graphic>
<ExternalGraphic>
<OnlineResource
xlink:type="simple"
xlink:href="Coffee Roasting.jpg" />
<Format>image/jpeg</Format>
</ExternalGraphic>
<Size>32</Size>
</Graphic>
</PointSymbolizer>
</Rule>
<Rule>
<Name>Charter Service</Name>
<Title>All Charter Services</Title>
<ogc:Filter>
<ogc:PropertyIsLike wildCard="*" singleChar="." escape="!">
<ogc:PropertyName>type</ogc:PropertyName>
<ogc:Literal>Charter Service</ogc:Literal>
</ogc:PropertyIsLike>
</ogc:Filter>
<PointSymbolizer>
<Graphic>
<ExternalGraphic>
<OnlineResource
xlink:type="simple"
xlink:href="Charter Service.jpg" />
<Format>image/jpeg</Format>
</ExternalGraphic>
<Size>32</Size>
</Graphic>
</PointSymbolizer>
</Rule>
<Rule>
<Name>Apiary</Name>
<Title>All Apiaries</Title>
<ogc:Filter>
<ogc:PropertyIsLike wildCard="*" singleChar="." escape="!">
<ogc:PropertyName>type</ogc:PropertyName>
<ogc:Literal>Apiary</ogc:Literal>
</ogc:PropertyIsLike>
</ogc:Filter>
<PointSymbolizer>
<Graphic>
<ExternalGraphic>
<OnlineResource
xlink:type="simple"
xlink:href="Apiary.jpg" />
<Format>image/jpeg</Format>
</ExternalGraphic>
<Size>32</Size>
</Graphic>
</PointSymbolizer>
</Rule>
<Rule>
<Name>Vineyard</Name>
<Title>All Vineyards</Title>
<ogc:Filter>
<ogc:PropertyIsLike wildCard="*" singleChar="." escape="!">
<ogc:PropertyName>type</ogc:PropertyName>
<ogc:Literal>Vineyard</ogc:Literal>
</ogc:PropertyIsLike>
</ogc:Filter>
<PointSymbolizer>
<Graphic>
<ExternalGraphic>
<OnlineResource
xlink:type="simple"
xlink:href="Vineyard.jpg" />
<Format>image/jpeg</Format>
</ExternalGraphic>
<Size>32</Size>
</Graphic>
</PointSymbolizer>
</Rule>
<Rule>
<Name>Retail Seafood</Name>
<Title>All Retail Seafood</Title>
<ogc:Filter>
<ogc:PropertyIsLike wildCard="*" singleChar="." escape="!">
<ogc:PropertyName>type</ogc:PropertyName>
<ogc:Literal>Retail Seafood</ogc:Literal>
</ogc:PropertyIsLike>
</ogc:Filter>
<PointSymbolizer>
<Graphic>
<ExternalGraphic>
<OnlineResource
xlink:type="simple"
xlink:href="Retail Seafood.jpg" />
<Format>image/jpeg</Format>
</ExternalGraphic>
<Size>32</Size>
</Graphic>
</PointSymbolizer>
</Rule>
<Rule>
<Name>Bakery</Name>
<Title>All Bakeries</Title>
<ogc:Filter>
<ogc:PropertyIsLike wildCard="*" singleChar="." escape="!">
<ogc:PropertyName>type</ogc:PropertyName>
<ogc:Literal>Bakery</ogc:Literal>
</ogc:PropertyIsLike>
</ogc:Filter>
<PointSymbolizer>
<Graphic>
<ExternalGraphic>
<OnlineResource
xlink:type="simple"
xlink:href="Bakery.jpg" />
<Format>image/jpeg</Format>
</ExternalGraphic>
<Size>32</Size>
</Graphic>
</PointSymbolizer>
</Rule>
<Rule>
<Name>Dairy/Eggs</Name>
<Title>All Dairy/ Eggs</Title>
<ogc:Filter>
<ogc:PropertyIsLike wildCard="*" singleChar="." escape="!">
<ogc:PropertyName>type</ogc:PropertyName>
<ogc:Literal>Dairy/Eggs</ogc:Literal>
</ogc:PropertyIsLike>
</ogc:Filter>
<PointSymbolizer>
<Graphic>
<ExternalGraphic>
<OnlineResource
xlink:type="simple"
xlink:href="Dairy_Eggs.jpg" />
<Format>image/jpeg</Format>
</ExternalGraphic>
<Size>32</Size>
</Graphic>
</PointSymbolizer>
</Rule>
<Rule>
<Name>Christmas Tree Farm</Name>
<Title>All Christmas Tree Farms</Title>
<ogc:Filter>
<ogc:PropertyIsLike wildCard="*" singleChar="." escape="!">
<ogc:PropertyName>type</ogc:PropertyName>
<ogc:Literal>Christmas Tree Farm</ogc:Literal>
</ogc:PropertyIsLike>
</ogc:Filter>
<PointSymbolizer>
<Graphic>
<ExternalGraphic>
<OnlineResource
xlink:type="simple"
xlink:href="Christmas Tree Farm.jpg" />
<Format>image/jpeg</Format>
</ExternalGraphic>
<Size>32</Size>
</Graphic>
</PointSymbolizer>
</Rule>
<Rule>
<Name>Grains</Name>
<Title>All Grain Farms</Title>
<ogc:Filter>
<ogc:PropertyIsLike wildCard="*" singleChar="." escape="!">
<ogc:PropertyName>type</ogc:PropertyName>
<ogc:Literal>Grains</ogc:Literal>
</ogc:PropertyIsLike>
</ogc:Filter>
<PointSymbolizer>
<Graphic>
<ExternalGraphic>
<OnlineResource
xlink:type="simple"
xlink:href="Grains.jpg" />
<Format>image/jpeg</Format>
</ExternalGraphic>
<Size>32</Size>
</Graphic>
</PointSymbolizer>
</Rule>
<Rule>
<Name>Meat Products</Name>
<Title>All Meat Products</Title>
<ogc:Filter>
<ogc:PropertyIsLike wildCard="*" singleChar="." escape="!">
<ogc:PropertyName>type</ogc:PropertyName>
<ogc:Literal>Meat Products</ogc:Literal>
</ogc:PropertyIsLike>
</ogc:Filter>
<PointSymbolizer>
<Graphic>
<ExternalGraphic>
<OnlineResource
xlink:type="simple"
xlink:href="Meat.jpg" />
<Format>image/jpeg</Format>
</ExternalGraphic>
<Size>32</Size>
</Graphic>
</PointSymbolizer>
</Rule>
<Rule>
<Name>Nursery</Name>
<Title>All Nurseries</Title>
<ogc:Filter>
<ogc:PropertyIsLike wildCard="*" singleChar="." escape="!">
<ogc:PropertyName>type</ogc:PropertyName>
<ogc:Literal>Nursery</ogc:Literal>
</ogc:PropertyIsLike>
</ogc:Filter>
<PointSymbolizer>
<Graphic>
<ExternalGraphic>
<OnlineResource
xlink:type="simple"
xlink:href="Nursery.jpg" />
<Format>image/jpeg</Format>
</ExternalGraphic>
<Size>32</Size>
</Graphic>
</PointSymbolizer>
</Rule>
<Rule>
<Name>Petting Zoo</Name>
<Title>All Petting Zoos</Title>
<ogc:Filter>
<ogc:PropertyIsLike wildCard="*" singleChar="." escape="!">
<ogc:PropertyName>type</ogc:PropertyName>
<ogc:Literal>Petting Zoo</ogc:Literal>
</ogc:PropertyIsLike>
</ogc:Filter>
<PointSymbolizer>
<Graphic>
<ExternalGraphic>
<OnlineResource
xlink:type="simple"
xlink:href="Petting Zoo.jpg" />
<Format>image/jpeg</Format>
</ExternalGraphic>
<Size>32</Size>
</Graphic>
</PointSymbolizer>
</Rule>
</FeatureTypeStyle>
</UserStyle>
I realize this post is old but maybe someone will benefit from my answer.
I didn't succeed in using relative image paths so I turned to using URL paths.
Put image(s) in $GEOSERVER_DATA_DIR/styles and reference it with http://localhost:8081/geoserver/styles/some_image.png
For example
<ExternalGraphic>
<OnlineResource xlink:type="simple" xlink:href="http://localhost:8081/geoserver/styles/some_image.png"/>
<Format>image/png</Format>
</ExternalGraphic>
Nice answer, but you need to change the 8081 to 8080 assuming the geoserver instance is working on port 8080
you can put your image in style folder

Resources